2011-10-13 26 views

回答

3

然后调用setter时刚刚将属性设置为无属性会发生什么指向nil的指针,没有其他事情发生。

编辑:区别(非原子,分配)和(非原子,保留)

assign - 属性将只设置指针和retain - 属性也将呼吁旧发布,并保留在新对象。

合成(nonatomic, assign) -setter看起来就像这样:

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

而合成(nonatomic, retain) -setter看起来就像这样:

-(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

正常情况下,我们会@property(nonatomic,retain)NSString * myData;那么这里有什么区别。 – Abhinav

+0

看看我编辑的答案 – thomas

0

这样做没有任何问题。

这样做通常没有任何好处。它将不起作用,除非dealloc中的一些代码在依赖于myData的值之后运行。

当您将声明的属性设置为retain并将其定义为nil时,它会导致发送到以前的属性值。但是,当它被定义为分配时,这不会发生。它基本上只是设置实例变量,这在dealloc中通常无关紧要,因为没有其他任何内容会读取实例变量的值。

相关问题