2009-08-02 4 views
0

(Точно так же вы знаете, что я учусь развиваться для Iphone, без interfacae строителя)iPhone Dev - Multi-View App отложенной загрузка

Я кодирование моего первого приложения в несколько проекций, который имеет корень ViewController и два других контроллера просмотра, а корневой диспетчер представлений использует ленивую загрузку, поэтому, когда viewDidLoad, он создает первый диспетчер представлений и добавляет его представление в подвью, но не создает другой, пока он не понадобится. Но после того, как второй загрузился, они оба остаются там до тех пор, пока приложение не закончится (если оно не получит предупреждение о памяти).

Так что мне интересно: когда пользователь переключает два других вида, должен ли я выгрузить другой удаляемый (установив его на nil - его сохраняющее свойство)? Таким образом, каждый раз, когда пользователь нажимает кнопку, текущий диспетчер представлений выгружается (после удаления из супервизора), а следующий загружается и добавляется как подвью?

Так это правильно, или это правильно, но только тогда, когда приложение имеет много просмотров, а мое не достаточно сложно, чтобы оправдать это, или это плохо сделать, и я должен просто пусть didReceiveMemoryWarning позаботится об этом (In didReceiveMemoryWarning Я установил viewcontroller, который в настоящее время не отображается в nil)?

ответ

1

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

Вы действительно не хотите, чтобы ваше приложение нажимало на телефон пользователя didReceiveMemoryWarning. Когда вы получаете это предупреждение, в телефоне происходят другие вещи, которые могут заставить ваше приложение замораживаться на мгновение, в то время как iPhone сбрасывает кэшированные страницы Safari, кэширует объекты UIImageView и т. Д. ... этот процесс может быть заметен для конечного пользователя и вашего приложение может выглядеть не так гладко, как должно.

Также важно помнить, что некоторые пользователи могут использовать iPhone первого поколения, iPod Touches и 3G, чтобы у них не было дополнительной памяти 3GS.

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

+0

Хорошо спасибо. Я просто хотел позволить didReceiveMemoryWarning позаботиться об этом, если дело дойдет до этого, а не как это приложение. – mk12

+0

Что касается контроллера панели табуляции, его довольно сложно выгрузить представление, которое не отображается без его перезаписи .. – mk12

+0

Я думаю, вы могли бы использовать viewDidDisappear для выпуска представления и использовать viewDidAppear для его восстановления. Технически это будет самый эффективный метод с контроллером панели вкладок, удерживающим ваш UIViewController IMHO. –

Смежные вопросы