Vielleicht ist dies eine schlechte Übung, aber von den Dokumentationen, die ich gelesen habe, bekam ich den Rat, Objekte in einigen Fällen innerhalb der ViewDidLoad-Methode und Null in ViewDidUnload zu initialisieren.iOS6 viewDidUnload Veraltet
Zum Beispiel, wenn Sie etwas haben, wie ein Beobachter des Hinzufügen
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(filterready:)
name:@"filterReady"
object:nil];
Jetzt habe ich keine Methode, um die Beobachter zu entfernen, aber die viewDidLoad genannt wird jedesmal, wenn die Ansicht dargestellt, die mehrere in mit Ergebnissen Beobachter laufen nach einer Weile und der Selektor wird dann mehrmals aufgerufen.
Ich kann das beheben, indem ich einige Reiniger in die Methode viewDidDisappear verschiebe, aber jetzt habe ich einige Zweifel, ob ich das Richtige tue.
In meinem Beispiel habe ich mehr Navigation-Controller, die ihre Subnavigationen steuern, aber die dealloc wird nie für sie genannt, obwohl sie nicht
Es ist wahrscheinlich die richtige Antwort. Trotzdem ist es seltsam, dass sie diese Nachricht entfernt haben. Ich habe gelernt, das SDK zu verwenden, indem ich den Folien von Paul Hegarty folgte, und natürlich sind sie immer noch für iOS5. Ich werde dieses Jahr nach seinen aktualisierten Dias suchen, vielleicht gibt er einen guten Hinweis darauf. – Hons
@Hons ist es überhaupt nicht seltsam - 'viewDidUnload' wurde, explizit nach der Dokumentation, nur aufgerufen, wenn Ihre Ansicht aufgrund einer Speicherwarnung gelöscht wird. Wenn Sie einen Beobachter in 'viewDidLoad' hinzufügen und ihn nur in' viewDidUnload' entfernen, werden Sie die Zuweisung häufig aufheben, ohne sie zu entfernen. Das lässt einen baumelnden Zeiger im Benachrichtigungszentrum zurück, der später zu einem Absturz führt. – Tommy
Wie überprüfen Sie, ob sich Ihre Ansicht im Fenster befindet? – zakdances