removeFromParentViewController müssen Sie auf nil danach?
Kann ein Kind view-controller "selbst entlassen?" .....
Haben Sie eine view-controller "RedMessage". Sie haben eine gewöhnliche starke Eigenschaft für Sie ...
@property (strong) RedMessage *rot;
Fügen Sie es ("Modal") ganz oben auf Ihrer aktuellen VC...
self.red = (RedMessage *)[self.storyboard
instantiateViewControllerWithIdentifier:@"RedMessageID"];
self.red.view.frame = self.view.frame;
[self.view addSubview:self.red.view];
[self addChildViewController:self.red];
[self.red didMoveToParentViewController:self];
Loszuwerden, es später tun dies
[self.red willMoveToParentViewController:nil];
[self.red.view removeFromSuperview];
[self.red removeFromParentViewController];
ABER IN der TAT, Sie brauchen, um dies zu tun??
[rm willMoveToParentViewController:nil];
[rm.view removeFromSuperview];
[rm removeFromParentViewController];
rm = nil;
Braucht man das "= null;" ?
Beachten Sie, dass diese Frage kritisch ist, weil: wenn Sie NICHT AUF null, Sie können dann Folgendes tun in der neuen view-controller...
-(void)dismissMyselfCompletely
{
[self willMoveToParentViewController:nil];
[self.view removeFromSuperview];
[self removeFromParentViewController];
}
Welche ist sehr bequem.
Kurz gesagt, wenn Sie tun, dass in der neuen top-view-controller - wird es "Arbeit", Sie befreit den VC?
Wenn removeFromParentViewController passiert, hat der Elternteil VC verstehen, es kann loslassen selbst.rot?
- Kopfgeld für authorative Referenz.
- Leider bieten eine Antwort, aber wir haben testen es ausgiebig und fand das Ergebnis in die Antwort ... hoffe es hilft jemandem!!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach umfangreichen Tests haben wir festgestellt, dass es scheint der Fall zu sein, dass:
Sie können in der Tat erlauben, einen VC zu "entfernen" sich von selbst."
es wird Weggehen und ist nicht beibehalten.
Fügen wir die VC auf der Oberseite wie diese (nur in der üblichen Art und Weise fügen Sie eine "modale" VC auf der Oberseite...)
Beachten Sie, dass es keine Eigenschaft holding rr - es ist einfach erstellt und Hinzugefügt, auf die fliege in dieser Kategorie.
Innen "Rot", die wir loswerden es ist einfach so...
(exitLeft ist nur eine animation, nicht relevant)
Schließlich können Sie testen, wie diese:
Können Sie deutlich sehen, dass sobald die "Roten" vc entlassen wird, in der Tat, der ticker nicht mehr läuft: "Rote" ist Weg.
Scheint es zuverlässig zu funktionieren. Ihre Ausgabe wird in etwa so Aussehen...
Wiederholen, als AnujYadav Punkte aus, wenn Sie verwenden Sie eine Eigenschaft in der übergeordneten VC für die "Roten"...
dann
etc ... in der Tat, das funktioniert NICHT. In diesem Fall müssten Sie selbst.rot=null in der parent-oder es nicht Weg.
Dies ist mehr Speicher-management-Frage, die als view-controller Eindämmung ein. Nein, Sie müssen nicht null da, aber...
Sind Sie vorausgesetzt, Sie haben einen Verweis darauf. Frage ist: ist es der starke Bezug? wenn ja, dann haben Sie zu null, weil das view-controller wird nicht dellocated. Einfachste Weg, um es zu testen ist, um add-dealoc Methode zu rm mit der log-Meldung.
Scheint es einen Unterschied in Ihrem Frage-und-Antwort. In der overlay-Methode (in der Antwort) du hast nicht belegt das ViewController starke Eigenschaft und in der Frage, die Sie haben eine starke Eigenschaft. Ich habe nicht getestet, der code, aber ich glaube, Sie sollten aktualisieren Sie Ihre test-eine starke Eigenschaft.
Ich denke, dass im Idealfall sollten wir "nil" das Eigentum. Ansonsten, vom stack ja view-controller entfernt werden.