Стек ARC UINavigationController не освобождается при представлении в качестве контроллера модального представления - PullRequest
3 голосов
/ 04 января 2012

Во-первых: я портировал свое приложение на ARC, и все, казалось, работало.Но теперь я обнаружил проблему: у меня есть UINavigationController, который представлен модально с некоторыми UIViewController в его стеке.Но когда я отклоняю модальный контроллер представления, контроллеры представления из стека, кажется, не освобождаются.Вот что я делаю:

UIViewController* root = [[UIViewController alloc] init];
UINavigationController* navi = [[UINavigationController alloc] initWithRootViewController:root];
[self presentModalViewController:navi animated:TRUE];

Затем из корня я добавляю еще несколько контроллеров представления, но это не имеет значения.Дело в том, что когда я позже позвоню

[self dismissModalViewControllerAnimated:TRUE];

, root не будет освобожден.Конечно, в моем коде root есть подкласс UIViewController, и я отслеживаю dealloc и viewDidUnload, но ничего не вызывается.

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 04 января 2012

Что внутри вашего контроллера навигации? Возможно, что-то еще (возможно, контроллер представления внутри вашего контроллера навигации) является виновником, который ведет вверх по цепочке, означая, что контроллер навигации не освобождается.

В любом случае, опубликованный вами код верен, поэтому, если ваш контроллер навигации не выпускается после вызова dismissModalViewController, это может означать, что что-то еще имеет активную ссылку на него или одну из его зависимостей. Я знаю, что это не отвечает на ваш вопрос, но вам, вероятно, придется охотиться вокруг.

1 голос
/ 04 января 2012

Поскольку вы не показываете реальный код, трудно сказать, что происходит с вашим корневым контроллером представления.

Но с ARC, если у вас есть сильный указатель на объект, он победит 'Тебя выпустят.Я подозреваю, что вы держите этот контроллер после добавления его в свой навигационный контроллер.

Но, не видя ваш код, я не могу сказать.

...