2009-06-28 7 views
1

私はSourceListViewControllerと呼ばれるカスタムviewControllerを持っています。それをUINavigationControllerに追加しています。そのビューは、iPhoneのAppのウィンドウに追加されます。 SourceListViewControllerをUINavigationControllerに渡した後、私はsourceListViewControllerを解放します。initWithRootViewControllerは、渡されるviewControllerクラスを保持しないのはなぜですか?

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

このようにすると、ビューが携帯電話に読み込まれた後にアプリがクラッシュする可能性があります。私は最後の行をコメントアウトすると、アプリは正常に動作します。 initWithRootViewControllerはsourceListVCのコピーを保持するはずですか?

答えて

8

あなたは、自動リスニングのnavigationControllerです。したがって、navigationControllerがオートレリースされると(おそらく次回のrunloopで起こります)、sourceListVCもそうです。

+0

これは、sourceListVCが保持されているわけではありません。それはNavigationControllerをリリースすると、そのViewControllerもすべて解放され、NVCはルートビューコントローラを保持しません。 – karim

関連する問題