是否有必要为指定的变量添加?

时间:2009-07-22 02:19:11

标签: objective-c memory-management

在某些代码中,我有时会看到这一点:

@property (nonatomic, assign) NSObject *foo;

...

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

是否真的有必要在未保留对象时将其置零?这实际上不会导致问题吗?

3 个答案:

答案 0 :(得分:3)

assign属性不必在-dealloc中将其ivar设置为nil。

在-dealloc中将ivar设置为nil是无害的。使用公共访问器在dealloc中将属性设置为nil([self setFoo:nil]或self.foo = nil)可能会产生不必要的副作用。

答案 1 :(得分:3)

最好将您不再感兴趣的任何指针设置为nil。我不主张在-dealloc中使用这样的访问器,因为可能存在访问者副作用(如发布通知或KVO),但这是一个有争议的立场,Apple在他们自己的代码中并不一致。在任何情况下,最好不要指点你的指针。它肯定不会引起问题,而且在-dealloc中使用你的指针的习惯将在未来为你节省大量的错误。

在这种特殊情况下可能没有必要,但你提出了什么样的问题?

答案 2 :(得分:2)

假设它是一个合成的访问器,那么在dealloc中就没有意义了。早些时候,如果你不想再与对象交谈,你可能会把它弄清楚。但是我看不出它会如何引起问题。

如果它不是合成访问器,则setter也可能以某种方式影响反向关系,在这种情况下,可能需要将其设置为nil以告诉foo你不会去到处都是。