2012-04-14 3 views
1

Die beste Methode in iOS, um ein Ereignis zu subskribieren ist ViewDidLoad, aber wenn View geschlossen wird, wird ViewDidUnload() nicht aufgerufen (nur wenn die Speicherwarnung).Monotouch/iOS: Welcher Ort ist der beste, um den Delegierten abzumelden

Welcher Ort ist der beste, um die Veranstaltung abzubestellen?

(Im subviewController abonniere ich ein Ereignis, das die Mainviewcontroller verweisen, beim Aufschneiden der subview zweimal, erhalte ich zwei Ereignisauslöser, weil die Abmelde in ViewDidUnload() nie aufgerufen wird.)

Wie wäre es mit abonnieren/abbestellen in ViewWillAppear/ViewWillDisapper?

public override void ViewWillAppear (bool animated) 
    { 
     base.ViewWillAppear (animated); 

     this.mBL.OrderChanged += HandleOrderChanged;    
    } 

    public override void ViewWillDisappear (bool animated) 
    { 
     base.VieWillDisappear (animated); 
     if (this.mBL!=null) 
      this.mBL.OrderChanged -= HandleOrderChanged;   
    } 

Antwort

1

Verwenden ViewDidLoad und ViewDidUnload, das sind die entsprechenden Stellen abonnieren/abbestellen Ereignisse aus der Benutzeroberfläche.

Hier ist ein allgemeiner Artikel über die Speicherverwaltung in iOS, die ich denke hier gilt: http://www.buildingiphoneapps.com/buildingiphoneapps/2010/6/25/memory-management-and-viewdidunload.html

Nun, wenn Sie nicht wollen, sind die Veranstaltung laufen haben, wenn Sie Ihre Ansicht nicht sichtbar ist, so etwas tun in der Event-Handler:

if (IsViewLoaded && View.Window != null) { 
    //code here 
} 

Ich habe festgestellt, dies ist der einfachste Weg zu sagen, ob die Ansicht auf dem Bildschirm ist.

+0

Was bei der Verwendung von ViewWillAppear und ViewWillDisappear falsch ist()? Dann sind keine Überprüfungen erforderlich. Und noch eine Frage zu Ihrer Prüfung: Wenn Sie "View.Window" in ViewDidUnload aufrufen, lädt der "View" -Aufruf die Ansicht nicht erneut? – Krumelur

+0

Ich würde per ViewWillAppear und ViewWillDisappear, danke. – BlueSky

+0

Beachten Sie, dass ViewWillAppear und ViewWillDisappear in einem UINavigationController möglicherweise nicht wie erwartet funktionieren. ViewWillAppear/Disappear wird nicht aufgerufen, wenn ein Controller übergedrückt wird. Ähnliches passiert mit Modal View Controllern. – jonathanpeppers

Verwandte Themen