iPhone dev - создать массив в init или viewDidLoad

В моем подклассе UIViewController я должен инициализировать NSArray данных для UIPickerView в init или в viewDidLoad и почему? Благодарю.

Ответы на вопрос(3)

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

когда это делается в init, является то, что viewDidLoad может вызываться после viewWillAppear. Если вы полагаетесь на наличие массива в это время, вам может потребоваться поместить инициализацию в init.

Вообще говоря, viewDidLoad - это довольно хорошее место, если учесть, что его можно вызывать более одного раза.

Решение Вопроса

viewDidLoad поскольку представление может быть загружено более одного раза (а также выгружено, следовательно, вы также можете перезагрузить массив).

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

 T .17 авг. 2009 г., 14:22
Представление выгружается UIViewController, когда он получает предупреждение о памяти, после чего он будет вызывать viewDidUnload. Если вы создаете свой массив в viewDidLoad, вы должны обязательно уничтожить его в viewDidUnload. Вы также должны быть уверены, что к нему никогда не будет доступа, если представление не видно (представления не выгружаются, если они видны). Если вам нужен доступ к нему (например, для его обновления), даже если ваше представление не видно, я бы порекомендовал создать его в init. Apple рекомендует использовать viewDidLoad только для объектов, которые легко воссоздать.
 mk1217 авг. 2009 г., 03:36
Хорошо, это имеет смысл, но не могли бы вы сказать мне, когда вызывается viewDidUnload? Я знаю, когда представление выгружено, но когда это происходит автоматически? Как я могу выгрузить это вручную?
 T .17 авг. 2009 г., 14:24
Альтернативой его созданию в init является определение массива как свойства и ленивое создание массива при первом обращении к нему. Конечный результат совпадает с методом init, но если вы никогда не получите доступ к массиву, он не будет использовать память.

Ваш ответ на вопрос