在dealloc中应将哪种属性设置为nil?

5
我正在使用ARC。ARC是否会在dealloc中自动释放所有属性?是否需要手动将所有公共属性和私有字段设置为nil?是否有任何好的模式可以遵循?
2个回答

5

在ARC下,模式是...不需要在dealloc中做任何事情,甚至不需要实现它。ARC会为您处理属性和实例变量。

唯一的例外是,如果您的对象注册了任何通知,则dealloc是取消注册通知的好地方。


在 dealloc 中取消注册通知非常重要,因为这种错误很难发现。 - amb
如果任何对象有任何代理,这里也可以将代理设置为nil。someObject.delegate = nil; - GangstaGraham
1
@GangstaGraham 如果对象对其委托使用弱引用,您不应该需要这样做,但我发现在某些情况下必须这样做,特别是对于滚动视图和 Web 视图委托,即使在 ARC 下也是如此。 - jrturton
1
请注意,如果您的目标是 iOS 9 及更高版本或 OS X 10.11,则您也不再需要取消注册通知(除非它们是基于 block 的),因为系统也会处理它们。 - Mark Reid

0

好问题。使用 ARC 时,编译器会为您实现一个 dealloc 方法,并隐式处理实例变量和属性的释放。

如果您的类需要执行除释放内存之外的任何操作(例如取消像 jrturton 提到的通知),则仍然需要自定义 -dealloc

您可以在这些苹果官方 笔记 中了解到在转换到 ARC 时需要考虑的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接