Ваш вопрос, кажется, «Как мне обрабатывать свойство retain
в dealloc?» Ну, давайте посмотрим на пример.
@property (retain, nonatomic) IBOutlet UIView *myView;
Когда вид загружен myView
удерживается два объектами, иерархия вида (внутренний addSubview:
или аналогичным) и контроллер просмотра (с помощью метода инкубационной собственности). Простой журнал - это все, что необходимо для подтверждения этого. размещения этого кода в viewDidLoad
подтвердит это с выходом 2.
NSLog(@"myLabel is retained: %i", myView.retainCount);
Есть два способа, где вы должны обратиться к этой указатель, и оба будут автоматически заполнены для вас Xcode
.
Первый в viewDidUnload
(который обычно вызывается только в ситуациях с низкой памятью) вы хотите освободить представление, и так как это приведет к оборванному указателю, вы также захотите установить указатель на нуль. Xcode достигает этого, просто используя метод setter.
[self setMyView:nil];
Второе место, и место, где вы спросили о изначально dealloc
. В dealloc вам также нужно освободить вашу собственность, хотя в этом случае (только для основного потока, основанного на IBOutlet
в вопросе), оборванный указатель не должен быть проблемой. Это похоже на автоматическую реализацию Xcode dealloc.
[myView release];
Конечно установки указателя на nil
в дополнение к выпуску не будет иметь пагубные последствия на всех. И даже может быть предпочтительнее, если бы это был не основной поток только UIKit
элемент. Но если вы беспокоились о многопоточности, вы, скорее всего, просто используете atomic
.
Возможный дубликат [Требуется ли устанавливать выходные данные для nil в dealloc (даже после IOS 3.0)?] (Http://stackoverflow.com/questions/5658535/is-it-required-to-set-outlets -varibles к нулю-в-dealloc-даже-после-КСН-3-0) –