Когда выпустить IBOutlet? - PullRequest
       20

Когда выпустить IBOutlet?

2 голосов
/ 13 июля 2011

Я использовал Interface Builder для подключения элементов GUI к IBOutlet в контроллере представления, но не уверен, когда мне нужно их освободить, в viewDidUnload или dealloc?Или оба?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 13 июля 2011

Предполагая, что они являются свойствами, вы должны установить для них nil как в viewDidUnload, так и в dealloc, убедившись в том, что вы используете установщик. Так, например,

self.imageView = nil;
self.segmentControl = nil;
/* etc */

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

viewDidUnload вызывается, когда представление вашего контроллера представления было извлечено из памяти, что может произойти, когда предупреждение памяти появляется, и ваш контроллер представления в настоящее время не использует его представление. Если вы сохранили некоторые подпредставления для себя (неявно, через установщик 'retain' или намеренно) и не освободили их, они останутся в памяти. Вы не хотите, чтобы они это делали, потому что вы должны освободить как можно больше памяти после получения предупреждения о памяти, и вы или другие процессы могут быть остановлены, если недостаточно памяти освобождается во всей системе. Так что быть добрым к своему пользователю и быть хорошим гражданином.

Тот же совет применяется независимо от того, сохранены ли вы или назначены свойства; если они сохраняются, тогда установка свойства в nil освобождает, если они просто назначены, тогда установка свойства в nil не позволит вам держать висячий указатель.

0 голосов
/ 13 июля 2011

Вы должны выпустить IBOutlets в dealloc.

В viewDidUnload вы должны освободить все, что вы создали или сохранили в viewDidLoad.

...