Установка свойства в nil при создании его с помощью «assign» - PullRequest
0 голосов
/ 13 октября 2011

Что произойдет, если я создаю свойство с атрибутом «assign», установим для свойства значение nil в методе dealloc

@property (nonatomic, assign) NSString* myData;

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

Ответы [ 2 ]

3 голосов
/ 13 октября 2011

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

edit : разница между (неатомным, назначить) и (неатомным, сохранить)

Свойство assign будет устанавливать только указатель, а свойство retain также вызовет release для старого и сохранит новый объект.

Синтезированный (nonatomic, assign) -сеттер будет выглядеть так:

-(void) setMyData:(NSString*)value
{
    myData = value; //just assigning the pointer
}

И синтезированный (nonatomic, retain) -сеттер будет выглядеть так:

-(void) setMyData:(NSString*)value
{
    [value retain];   // retain new object
    [myData release]; // release old object. if myData is nil: nothing happens
    myData = value;   // assigning the pointer
}

Между получателями нет разницы. Оба просто неатомичны.

0 голосов
/ 14 октября 2011

В этом нет ничего плохого.

Обычно это не приносит пользы.Это не будет иметь никакого эффекта, если после этого не будет запущен еще какой-нибудь код в dealloc, который зависит от значения myData.

Когда вы устанавливаете свойство, объявленное и определенное как retain, равным nil, это вызывает отправку релизапредыдущее значение свойства.Но когда он определен как assign, этого не происходит.По сути, он просто устанавливает переменную экземпляра, которая обычно не имеет значения в dealloc, поскольку больше ничего не будет считывать значение переменной экземпляра.

...