1

鉴于我们正在使用 ARC 编写代码,我应该从以下实例中实例化的nil属性viewDidUnload

  1. XIB(这里的 nilling 有时是从 IDE 生成的)

  2. 来自初始化程序并且没有 IBOutlet

  3. 弱的

?

4

2 回答 2

1

您的一般规则:

  1. nil仅此strong IBOutlets而已。别管weak那些。
  2. nil实例化的所有属性viewDidLoad,而不是 initinitWithCoder:initWithNibName:bundle:

您还应该nil“即时”重新创建属性或进行nil检查,以释放更多内存。

于 2012-09-11T14:50:26.060 回答
1

的目的viewDidUnload是让您的应用程序有机会删除对可能不再存在的用户界面对象的引用,因为在收到内存警告时视图已被删除。因此:

  1. 您应该将任何用户界面控件设置为nil(因为正在卸载视图)。不需要weak属性(它们通常应该weak按照Apple关于此主题的指南),但如果 Xcode 为您插入它,这不是问题。有关如何操作的指导,请参阅《资源编程指南:Nib 文件viewDidUnload》的“内存警告”部分。

  2. 对于您在 in 中设置的非用户界面对象viewDidLoad,我会警惕盲目地将它们设置为nilin viewDidUnload,尤其是在您不使用 ARC 的情况下(例如,如果您不小心nil使用了实例变量,则可能会导致泄漏)。您可能希望平衡将恢复的内存量与重新检索该数据的“成本”(例如,如果它来自某个远程服务器)。无论如何,我建议您在didReceiveMemoryWarning.

在我看来,我认为viewDidUnload这是一个机会,可以确保我不会维护对可能不再存在的用户界面对象的引用,并且我会用它didReceiveMemoryWarning来清空缓存或其他非 UI 相关的项目,我可以安全地清除这些项目以恢复一些内存. 如果您担心 iOS 6,请注意处理viewDidUnload可能会发生变化,虽然 NDA 阻止我们公开讨论它,但我建议您可能需要参考iOS 6 Beta 4 发行说明并查找参考viewDidUnload.

于 2012-09-11T15:31:27.420 回答