Использование памяти: когда имеет смысл использовать UINavigationController, а когда нет? - PullRequest
2 голосов
/ 16 января 2012

Этот вопрос возникал у меня с тех пор, как я начал разработку для iOS: UINavigationController и использование памяти.

Я вижу множество приложений, таких как iMail, Find Friends, Notes и т. Д., В которых UINavigationController имеет смысл. Они позволяют вам детализировать два или три уровня иерархии и все.

Но представьте, что вы просматриваете глубокую иерархию, например, файловую систему вашего Mac, начиная с корневой папки. Если бы я использовал UINavigationController, я бы продолжал помещать в стек сотни контроллеров (в худшем случае). Я не считаю это хорошим использованием. Могут быть случаи, когда выдвинутые контроллеры могут стать очень тяжелыми (что касается памяти), и они просто сидят там даром.

Я бы хотел, чтобы существовала «динамическая» версия UINavigationController: он просто говорил бы вам, что создавать при переходе назад по иерархии, а не просто отображать иерархию.

Мой вопрос сейчас: предназначен ли UINavigationController для глубоких иерархий? Каковы хорошие альтернативы, если вы хотите всю анимацию, элементы бара и т. Д.? Или я вижу проблемы там, где их нет?

1 Ответ

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

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

Когда контроллер верхнего вида извлекается из стека, вызывается ваш метод viewDidLoad, позволяющий вам воссоздать ваше представление.

Если это действительно проблема, iOS5 позволяет вамсоздайте свои собственные «контейнерные» представления, чтобы вы могли создать свой собственный контроллер навигации, который будет работать именно так, как вы предлагаете.Ознакомьтесь с разделом «Реализация контроллера представления контейнера» документации UIViewController.

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

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