【问题标题】:What kind of property should be set to nil in dealloc?在 dealloc 中应该将什么样的属性设置为 nil?
【发布时间】:2012-12-30 09:23:07
【问题描述】:

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

【问题讨论】:

    标签: objective-c ios automatic-ref-counting


    【解决方案1】:

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

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

    【讨论】:

    • 在dealloc中取消注册通知非常重要,因为这种bug很难找到
    • 如果任何对象有任何代表,代表也可以在这里被 nil-ed 。 someObject.delegate = nil;
    • @GangstaGraham 如果对象对其委托有弱引用,则不需要这样做,但我发现有时必须这样做,特别是对于滚动视图和 Web 视图委托,即使在 ARC 下。
    • 请注意,如果您的目标是 iOS 9 及更高版本或 OS X 10.11,那么您也不再需要取消注册通知(除非它们是基于块的),因为这也将由系统处理。
    【解决方案2】:

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

    如果您的班级除了释放内存之外还需要做任何事情(例如,取消注册通知,如提到的 jrturton),您可能仍需要自定义 -dealloc

    您可以在 Apple 官方notes 中很好地了解过渡到 ARC 时需要考虑的事项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-15
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      • 2011-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多