UIViewController -dealloc-Methode nicht aufgerufen
Arbeite ich mit Automatic Reference Counting".
Ich habe eine benutzerdefinierte UIViewController
Unterklasse und immer wenn ich call -presentViewController: animated:completion:
oder entfernen Sie die Ansicht aus der superview ich möchte NSLog
so etwas wie "ich bin dealloced" so weiß ich, dass die view-controller wurde erfolgreich entfernt. Ich habe implementiert die -dealloc
Methode in meinem view controller. Allerdings begann ich ein test-Projekt, wo hatte ich nur zwei UIViewController
Instanzen (keine retain-Zyklen) und -dealloc
wird nicht aufgerufen, wenn ich push das zweite UIViewController
Modal oder wenn ich entfernen Sie die superview oder wenn ich es entfernen vom übergeordneten view-controller. Bin ich etwas fehlt ? In meinem ursprünglichen Projekt (nicht die test-case -) Instrumente zeigt mir, dass die Controller lassen einen Speicherbedarf, dass ich kann nicht get rid off.
-viewDidDisappear:
funktioniert, aber funktioniert diese Methode deuten auf die Freigabe ?Ich hatte noch nie NSZombieEnabled und ich denke, dass diese Frage gelöst wird in iOS6.
Es ist überhaupt nicht klar von was du gepostet hast auf Github, was Sie zu tun versuchen. Entfernen eines Controllers Blick aus dem Fenster nicht freigeben der Steuerung. Sie sollte ein post hier, ein Beispiel von dem, was du tust -- zeigt den gesamten code für den controller, dem Sie denken sollten, werden aufgehoben. Es hilft, um es zu sehen im Kontext.
Ich dachte, entfernen Sie die controller-Ansicht freigeben würde den controller auch... Aber ja, ich versuche tatsächlich loszuwerden der ganze controller nicht nur die Sicht, so dass der view-controller wird dealloced.
Wie Sie das tun, hängt stark von Ihrem Aufbau. Abberufung eines vorgestellten controller, oder knallen einen controller aus einem navigationsstapel beides sollte dazu führen, dass die Freigabe. Auch, wenn Sie nur schalten Sie das root-view-controller das Fenster, und Ihre ist die ein Sie der Wechsel Weg von, das wird auch dazu führen, dass es freigegeben ist.
InformationsquelleAutor the_critic | 2013-05-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie wechseln möchten, view-Controller, und die einen sind Sie der Wechsel Weg von freigegeben werden, dann schalten Sie einfach die root-Ansicht-controller des Fensters. So, wenn Sie in VC1 und wollen VC2, dann tun Sie dies in VC1:
Wenn Sie noch nicht erstellt ist-jede Immobilie zeigen vc1, dann wird es freigegeben, nachdem Sie diese wechseln.
Wenn Sie wollen, zu einem modalen Präsentation oder einem modal segue (die animation beim Schalt-Controller), können Sie immer noch den ersten regler freigegeben durch die Umstellung der root-view-controller nach der Präsentation von der Methode viewDidAppear von vc2:
InformationsquelleAutor rdelmar
Auf einen Druck, wenn der View-Controller aufgehoben wird, die Sie implementieren können, die dealloc-Methode hinzu, wie
Dann auf einen Druck, wenn der View-Controller-Links-die Ansicht, die Sie implementieren können,
-dealloc
. Das problem ist, es wird nicht aufgerufen...InformationsquelleAutor Groot
Wenn Sie
-presentViewController:animated:completion:
Sie halten die parentViewController jedes mal, wenn Sie diese Methode aufrufen. ModalViewControllers sind einfach nur gedrückt auf der Oberseite des anderen ViewController.ModalViewControllers sind nur für manche Art von Informationen /Benutzer-Input und so ein Zeug. Wenn Sie möchten, dealloc die ParentViewController, die Sie zu bewältigen haben Ihre eigene Implementierung.
-presentViewController:animated:completion:
Methode. Ich habe gerade versucht zu veranschaulichen meinem Fall. In Wirklichkeit habe ich nur hinzufügen, dass der Blick auf meine benutzerdefinierte VC zu einem anderen superview, ist nicht mit der alten VC.tun können Sie geben eine Art von code-Beispiel (gist.github.com)?
Natürlich gibt es Sie gehen: gist.github.com/anonymous/93242d562263bbf132eb
Versuchen Sie, Blick auf die Instrumente. Das problem hier ist, dass Sie nur entfernen Sie die Ansicht aus der superview und die ViewController beibehalten wird, die durch ein anderes Objekt. Der beste Weg, um dieses problem zu lösen ist, schauen Sie in Instrumente und schlagen zu behalten und die Versionen, die für das Objekt aufgerufen werden.
Ok, danke mariusLAN. Ich bin nicht besonders vertraut mit Instrumenten, welche Instrumente sollte ich verwenden, um zu sehen, behält/releases ?
InformationsquelleAutor mariusLAN
dealloc-Methode nicht aufgerufen, wenn die Klasse wird beibehalten (oder etwas in dieser Klasse wird beibehalten) und nicht reeleased. Es ist mit Recht für Projekte mit sowohl von ARC als auch ohne. So überprüfen Sie Ihren code zweimal.
InformationsquelleAutor user2159978