В чем разница между dealloc и viewdidunload? - PullRequest
5 голосов
/ 22 июня 2011

Когда я должен освободить всю память, выделенную в моей программе?

Поскольку у меня есть только метод viewDidLoad, в котором я занимаюсь бизнесом.Должен ли я оставить dealloc пустым и очистить только в viewDidUnload?

Ответы [ 2 ]

8 голосов
/ 22 июня 2011

'dealloc' используется, когда объект готов к освобождению (т. Е. Когда счет сохранения объекта становится равным 0). И viewDidUnload вызывается, когда представление выгружается, но оно не может быть немедленно освобождено, так как ссылка на UIViewController все еще сохраняется некоторыми другими объектами.

мое личное предпочтение заключается в том, что для объектов, созданных с помощью init, они освобождаются с помощью dealloc, для объектов, создаваемых с помощью viewDidLoad, они освобождаются с помощью viewDidUnload.

4 голосов
/ 22 июня 2011

Как сказано в документации -viewDidUnload:

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

Как правило, контроллер представления хранит ссылки на объекты с использованием розетки, которая является переменной или свойством включает в себя ключевое слово IBOutlet и является настраивается с помощью Interface Builder. Контроллер вида также может хранить указатели на объекты, которые он создает программно, например, в метод viewDidLoad. Предпочтительный способ отказаться от права собственности на любой объект (в том числе в торговых точках) использовать соответствующий метод доступа к установить значение объекта на ноль. Однако, если у вас нет метод доступа для данного объекта, возможно, вам придется освободить объект явно.

Нет упоминания, что -viewDidUnload позвонит по номеру -dealloc, на это не стоит полагаться.

...