【发布时间】:2009-07-22 02:19:10
【问题描述】:
在某些代码中我有时会看到:
@property (nonatomic, assign) NSObject *foo;
...
-(void)dealloc
{
self.foo = nil;
...
}
当一个对象没有被保留时,真的有必要将它归零吗?这真的不会造成问题吗?
【问题讨论】:
标签: objective-c memory-management
在某些代码中我有时会看到:
@property (nonatomic, assign) NSObject *foo;
...
-(void)dealloc
{
self.foo = nil;
...
}
当一个对象没有被保留时,真的有必要将它归零吗?这真的不会造成问题吗?
【问题讨论】:
标签: objective-c memory-management
最好将您不再感兴趣的指针设置为 nil。我不提倡在-dealloc 中使用这样的访问器,因为可能存在访问器副作用(例如发布通知或KVO),但这是一个有争议的立场,Apple 在他们自己的代码中并不一致。在任何情况下,将指针归零是一种很好的做法。这当然不会造成问题,并且在-dealloc 中将指针归零的习惯将在将来为您节省重大错误。
在这种特定情况下,可能没有必要,但你建议什么样的问题?
【讨论】:
assign 属性不必在 -dealloc 中将其 ivar 设置为 nil。
在 -dealloc 中将 ivar 设置为 nil 是无害的。在 dealloc 中使用公共访问器将属性设置为 nil([self setFoo: nil] 或 self.foo = nil)可能会产生不希望的副作用。
【讨论】:
假设它是一个综合访问器,那么在 dealloc 中执行它是没有意义的。早些时候,如果您不想再与对象交谈,您可能会取消它。不过,我看不出它会如何导致问题。
如果它不是合成访问器,setter 也可能以某种方式影响反向关系,在这种情况下,可能需要将其设置为 nil 以告诉 foo 你不会出现没有了。
【讨论】: