Если UIViewController будет освобожден при извлечении из NavigationController? - PullRequest
1 голос
/ 03 января 2012

В качестве следующего кода:

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

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

1 Ответ

2 голосов
/ 03 января 2012

Это будет выпущено, когда выскочил. UINavigationController сохраняет контроллеры push-представления и, конечно же, освобождает их при получении.

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

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

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

...