это необходимо, чтобы обнулить назначенную переменную? - PullRequest
4 голосов
/ 22 июля 2009

В каком-то коде я иногда вижу это:

@property (nonatomic, assign) NSObject *foo;

...

-(void)dealloc
{
   self.foo = nil;
   ...
}

Действительно ли необходимо обнулять объект, если он не был сохранен? Разве это не вызывает проблем?

Ответы [ 3 ]

3 голосов
/ 22 июля 2009

Свойство assign не обязательно должно иметь значение ivar равное nil в -dealloc.

Установка ivar на nil в -dealloc безвредна. Использование общедоступного метода доступа для установки для свойства nil в dealloc (либо [self setFoo: nil], либо self.foo = nil) может иметь нежелательные побочные эффекты.

3 голосов
/ 22 июля 2009

Хорошей практикой является установка любого указателя, который вас больше не интересует, равным нулю. Я не защищаю использование таких аксессоров в -dealloc из-за возможных побочных эффектов аксессоров (таких как отправка уведомлений или KVO), но это спорная позиция, и Apple не согласована в своем собственном коде. В любом случае, это хорошая практика, чтобы обнулить ваши указатели. Это, конечно, не вызовет проблем, и привычка обнулять ваши указатели в -dealloc спасет вас от значительных ошибок в будущем.

В данном конкретном случае это может не понадобиться, но какую проблему вы предлагаете?

2 голосов
/ 22 июля 2009

Предполагая, что это синтезированный метод доступа, нет смысла делать это в dealloc. Ранее вы могли бы обнулить это, если не хотите больше разговаривать с объектом. Я не вижу, как это может вызвать проблемы.

Если это не синтезированный метод доступа, сеттер также может каким-то образом повлиять на обратное отношение, и в этом случае может потребоваться установить его в ноль, чтобы сообщить foo, что вас не будет рядом больше.

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