Как правильно составить метод viewDidLoad

Я не совсем новичок в разработке iPhone, но я столкнулся с ситуацией, когда я не был уверен в лучшем выборе дизайна для моего кода.

У меня есть контроллер представления, который асинхронно извлекает изображение из Интернета и загружает его в представление изображения. Однако, когда приложение получает предупреждение о памяти, imageView выпускается с помощью didReceiveMemoryWarning. Если приложение получает предупреждение памяти при загрузке изображения, imageView равно нулю к тому времени, когда мой код пытается загрузить изображение в imageView.

Как лучше всего использовать viewDidLoad? Должен ли я просто создать экземпляры каких-либо переменных, которые могут мне понадобиться позже? Или я должен просто проверить нулевые значения в другом месте моего кода?

Кроме того, следует ли в viewDidUnload просто установить для переменных IBOutlet значение nil? Почему это?

Спасибо! -Матт


person mag725    schedule 13.11.2010    source источник
comment
Это не прямой ответ на этот вопрос, но, возможно, вам также следует отменить операцию загрузки при предупреждении о памяти ...   -  person Jason Coco    schedule 13.11.2010


Ответы (2)


Почему бы просто не создать представление изображения по запросу, когда изображение загружено? Нет необходимости создавать его раньше. Или, если да, то просто имейте код для его воссоздания, если он был выпущен.

В viewdidunload вы должны освободить ресурсы, которые вы создали в viewdidload (или загрузочном представлении). Включая любые IBoutlets, которые разработчик интерфейса подключил для вас. Хорошей практикой является установить для этих переменных значение nil, чтобы гарантировать, что к ним не будет случайно получен доступ после выпуска или двойного выпуска.

person TomSwift    schedule 13.11.2010

  1. IBOutlets могут быть как переменными экземпляра, так и свойствами. В обоих случаях мы должны освободить ссылки, когда будет выгружено представление, которое является самым верхним супервизором. Установка для свойства IBOutlet удерживаемых свойств в nil автоматически освобождает ссылку, но для переменных экземпляра нам нужно освободить их. Нам по-прежнему нужно установить для переменных экземпляра значение nil, потому что viewDidUnload не освобождается, поэтому мы должны соблюдать правило управляемой памяти, иначе внутри экземпляра могут находиться недопустимые ссылки.

  2. Я не думаю, что есть правила о том, что вы должны делать в viewDidLoad, но если вы выполнили релиз и установили для некоторых переменных значение nil в viewDidUnload, вам не нужно снова проверять nil в viewDidLoad, если вы не доверяете фреймворку. .

person tia    schedule 13.11.2010