2009-06-28 3 views
1

У меня есть пользовательский viewController, называемый SourceListViewController, и я добавляю его в UINavigationController, представление которого затем добавляется в окно приложения iphone. После передачи 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

Смежные вопросы