2009-06-28 10 views
1

Ich habe einen benutzerdefinierten ViewController mit dem Namen SourceListViewController, und ich füge es in einen UINavigationController, deren Ansicht dann in das Fenster der iPhone App hinzugefügt wird. Nachdem ich den SourceListViewController an UINavigationController übergeben habe, lasse ich den sourceListViewController los.Warum behält initWithRootViewController nicht die ViewController-Klasse, die übergeben wird?

SourceListViewController *sourceListVC = [[SourceListViewController alloc] initWithNibName:@"SourceListViewController" bundle:nil]; 
UINavigationController *navigationController = [[[UINavigationController alloc] initWithRootViewController:sourceListVC] autorelease]; 
[sourceListVC release]; 

Wenn ich dies tue, würde die App abstürzen, nachdem die Ansicht auf das Telefon geladen wurde. Als ich die letzte Zeile auskommentiert habe, funktioniert die App gut. Soll nicht initWithRootViewController die Kopie von sourceListVC behalten?

Antwort

8

Sie sind Autoreleasing NavigationController. Wenn also navigationController automatisch freigegeben wird (was wahrscheinlich im nächsten Runloop passieren wird), dann wird auch sourceListVC.

+0

Das bedeutet nicht, dass die sourceListVC beibehalten wird. Ist es so, dass wenn Sie den NavigationController freigeben, alle seine ViewController freigegeben sind und der NVC nicht den Root View Controller behält? – karim

Verwandte Themen