Каков наилучший способ представления последовательности viewcontrollers, который пользователь может переходить назад и вперед случайным образом - PullRequest
1 голос
/ 01 ноября 2011

В моём приложении задействовано много контроллеров представления, некоторые из которых являются тяжелыми для памяти.

Пользовательский поток похож на запуск с домашнего viewcontroller, пользователь будет щелкать по последовательности viewcontroller (я использую presentModalViewControler для переходов).Иногда пользователь нажимает на строку меню или что-то в этом роде, чтобы вернуться к определенному контроллеру просмотра, через который он прошел в прошлом, или перейти к контроллеру просмотра, который еще не был представлен.Итак, это как: A-> B-> C-> D-> B-> D-> E-> F-> C-> I ...

То, что я сейчас делаю, таково:независимо от того, где находится пользователь, когда ему / ей нужно перейти к другому контроллеру вида, я просто создаю экземпляр целевого контроллера вида и представляю его как модальный контроллер вида.

Хорошо, он работает хорошо, но с инструментамиЯ определил, что выделенная куча памяти продолжает увеличиваться с момента запуска приложения.Я предполагаю, что parentViewController (или представление ViewController в iOS 5) никогда не будет выпущен, потому что он находится в корне или середине модального стека представления, так что это все равно, что продолжать добавлять экземпляры viewcontroller.

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

1 Ответ

2 голосов
/ 01 ноября 2011

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

Попробуйте использовать UINavigationController в качестве корневого контроллера вашего окна. Используйте ваш A контроллер представления в качестве корневого контроллера просмотра контроллера навигации. Затем, когда вы хотите перейти к вашему B контроллеру представления, сделайте это так (в каком-то методе вашего текущего контроллера представления):

UIViewController *b = [[BViewController alloc] init...];
[self.navigationController setViewControllers:[NSArray arrayWithObject:b] animated:YES];

Пока вы не сохраняете никаких других ссылок на ваши контроллеры представления A или B, они должны быть освобождены, когда они больше не видны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...