在某些代码中,我有时会看到这一点:
@property (nonatomic, assign) NSObject *foo;
...
-(void)dealloc
{
self.foo = nil;
...
}
是否真的有必要在未保留对象时将其置零?这实际上不会导致问题吗?
答案 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
你不会去到处都是。