Следите за вопросом viewDidUnload или dealloc - PullRequest
7 голосов
/ 16 мая 2010

уточняющий вопрос как продолжение:

Что именно я должен делать в viewDidUnload? Когда мне следует освобождать объекты в - (void) viewDidUnload, а не в -dealloc?

Итак, допустим, что в памяти недостаточно памяти, и представление скрыто, и вызывается viewDidUnload. Мы делаем релиз и ноль танца. Позже весь стек представлений не нужен, поэтому вызывается dealloc. Так как у меня уже есть содержимое release и nil в viewDidUnload, у меня его нет в dealloc. Совершенная.

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

Другими словами, будет ли когда-либо вызываться dealloc без вызова viewDidUnload?

И практическое продолжение этого заключается в том, что, если я выделяю и устанавливаю что-то в viewDidLoad, и я освобождаю это и устанавливаю nil в viewDidUnload, я оставляю это вне dealloc или я делаю защитную проверку nil в dealloc и выпустить / обнулить его, если не ноль?

1 Ответ

8 голосов
/ 16 мая 2010

Отпустите его в обоих. Вам не нужно проверять на ноль. Релиз на ноль ничего не делает.

Однако в viewDidUnload не выпускайте ivars, которые вы не можете легко воссоздать в viewDidLoad, если представление снова загружается.

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

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