2012-01-03 2 views
1

В следующем коде:Если UIViewController будет удален, если вы выскочили из навигационного контроллера?

UIViewController *controller = [[UIViewController alloc] init]; 
[controller.view addSubView:myOtherController.view]; 
[self.navigationController pushViewController:controller]; 
[controller release]; 

И myOtherController является глобальным объектом, он не будет освобожден. Итак, вопрос в том, что когда контроллер выскочит, если он будет выпущен? И если он не будет выпущен, как я могу это подтвердить? Спасибо!

ответ

2

Он будет выпущен при появлении. UINavigationController сохраняет нажатые контроллеры просмотра и, разумеется, освобождает их при выталкивании.

Редактировать: Собственность объекта - направленная ассоциация, но не дерево: объект A владеет объектом B, а B может принадлежать любому числу других объектов.

Выбранный контроллер владеет своим представлением, которое, в свою очередь, обладает подвью. Когда всплывающий контроллер освобождается, он отпускает свое представление, которое освобождает общий подзаголовок. Общий подзаголовок по-прежнему принадлежит другому объекту, поэтому он не освобождается.

Это идея подсчета ссылок.

+0

Спасибо! Но у всплывающего контроллера есть subView, который не был выпущен. Я не уверен, что всплывающий контроллер будет выпущен в этой ситуации. Так вы можете объяснить дальше? Большое спасибо! – wjldxt

+0

Контроллер сохраняет свой вид, который сохраняет его подвид и т. Д. Но представления не сохраняют контроль или контроллер, поэтому он будет выпущен. – Zoleas

+0

Спасибо за ваше объяснение! – wjldxt

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