popToRootViewControllerАнимированный вопрос - PullRequest
1 голос
/ 04 марта 2011

У меня следующий вопрос - почему мое приложение не ждет, когда я звоню

[navController popToRootViewControllerAnimated:NO];
... set new viewcontrollers here

Я хочу:

1 / Убить все контроллеры представления с помощью вызова popToRootViewControllerAnimated - с параметром NO - затемя думаю, что я могу немедленно установить новые контроллеры представления

2 / установить новые контроллеры представления

Но в моих журналах я вижу следующее:

вызов контроллера poptorootview

код после poptorootview

освобождение представлений и контроллера (потому что я вызываю poptorootview)

Почему?Как я могу обнаружить, что все представления убиты, и навигационный контроллер выдвигается к корню?Спасибо,

1 Ответ

1 голос
/ 04 марта 2011

Контроллер удаленного представления в конечном итоге будет освобожден (если только другой объект не сохранит его), но ссылка не указывает точно, когда и как он был выпущен. Я не был бы удивлен, если это не немедленно выпущено; объекты UIKit могут использовать контроллер представления для анимации перехода. Он может быть автоматически выпущен, но не выпущен, что может объяснить ваши логи. Кроме того, я не удивлюсь, что внутри UINavigationController несколько объектов одновременно сохраняют контроллеры представления в стеке. Короче говоря, нет никакого документированного поведения при освобождении контроллеров с выталкиваемым представлением. Все, в чем мы можем быть уверены, это то, что он будет выпущен в какой-то момент, иначе это приведет к утечке памяти.

Следовательно, вы не знаете, когда контроллеры представления фактически освобождаются. Даже если вы обнаружите, что это может быть изменено без предварительного уведомления. Однако вы можете быть уверены, что представление исчезло, используя методы делегата UINavigationController.

...