-1

如果我创建一个带有“assign”属性的属性,在 dealloc 方法中将该属性设置为 nil,会发生什么

@property (nonatomic, assign) NSString* myData;

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

2 回答 2

3

然后调用setter,它只是将指针设置为nil,没有其他事情发生。

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

assign-property 只会设置指针,-propertyretain也会在旧对象上调用 release 并在新对象上调用 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
}

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

于 2011-10-13T19:25:03.547 回答
0

这样做并没有错。

这样做通常没有任何好处。它不会产生任何影响,除非在此之后运行 dealloc 中的更多代码,这取决于 myData 的值。

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

于 2011-10-13T21:27:01.090 回答