使用“assign”创建属性为nil

时间:2011-10-13 19:22:24

标签: iphone objective-c ios cocoa-touch retaincount

如果我使用“assign”属性创建属性会在dealloc方法中将属性设置为nil会发生什么

@property (nonatomic, assign) NSString* myData;

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

2 个答案:

答案 0 :(得分: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
}

在吸气剂之间没有区别。两者都只是非原子的。

答案 1 :(得分:0)

这样做没有错。

这样做通常没有任何好处。它将无效,除非dealloc中的更多代码在此之后运行,这取决于myData的值。

当您将声明并定义为retain的属性设置为nil时,会导致将release发送到上一个属性值。但是当它被定义为赋值时,就不会发生这种情况。它基本上只设置实例变量,这通常与dealloc无关,因为没有其他东西可以读取实例变量的值。