Сохраняются ли члены IBOutlet автоматически? - PullRequest
1 голос
/ 28 июня 2011

Странное открытие, когда я использовал перетаскивание для создания нового IBOutlet, как показано ниже, без @property вообще:

@interface SkinChoosingView : UIViewController {
    IBOutlet UIActivityIndicatorView * activityIndicator;
}

Xcode вставил -release и установил выходдо нуля в viewDidUnload.Я посмотрел в viewDidLoad, хотя, и -retain там не было!Это шло вразрез со всем, что я знаю об управлении памятью.

Я полагаю, что Apple должна знать кое-что об этой вещи, хотя, есть ли что-то за кадром, что происходит здесь?У меня никогда не было утечек из этих типов IBOutlets, и я никогда не выпускал их.

Ответы [ 2 ]

3 голосов
/ 28 июня 2011

Да, он автоматически сохраняет розетку для вас при загрузке файла NIB, если вы явно не объявите свойство, связанное с розеткой, как assign ed свойство.

И поскольку он сохраняет розетку для вас, вы должны сбросить в viewDidUnload, поскольку розетки будут перезагружены к моменту следующего вызова viewDidLoad.

1 голос
/ 28 июня 2011

Ответ заключается в том, что он использует «Кодирование значения ключа», что означает, что он вызывает -setValue:forKey:, который имеет «Шаблон поиска по умолчанию» . Для иваров это что-то вроде [ivar autorelease]; ivar = [newvalue retain];.

«В настоящее время рекомендуется использовать свойства IBOutlet вместо ivars (см. здесь ). Это делает очевидным, какой шаблон управления памятью используется и является более устойчивым к опечаткам (например, если вы неправильно написали ivar).

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