,如果我创建“分配”属性在dealloc方法与“分配”创建时,它设置一个属性,以零
@property (nonatomic, assign) NSString* myData;
- (void)dealloc {
self.myData = nil;
}
,如果我创建“分配”属性在dealloc方法与“分配”创建时,它设置一个属性,以零
@property (nonatomic, assign) NSString* myData;
- (void)dealloc {
self.myData = nil;
}
然后调用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
}
的干将之间是没有区别的。两者都只是非原子。
这样做没有任何问题。
这样做通常没有任何好处。它将不起作用,除非dealloc中的一些代码在依赖于myData的值之后运行。
当您将声明的属性设置为retain并将其定义为nil时,它会导致发送到以前的属性值。但是,当它被定义为分配时,这不会发生。它基本上只是设置实例变量,这在dealloc中通常无关紧要,因为没有其他任何内容会读取实例变量的值。
它只是设置myData为零。 –
哇,为什么4倒票? – morningstar