ViewDidLoad和ARC和XIB

时间:2012-09-11 14:45:09

标签: objective-c ios

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

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

  2. 来自初始化者的
  3. 并且没有IBOutlet

  4. 弱者

2 个答案:

答案 0 :(得分:1)

您的一般规则:

  1. nil仅限strong IBOutlets。单独留下weak个。
  2. nilviewDidLoad中实例化的所有媒体资源, initinitWithCoder:initWithNibName:bundle:
  3. 您还应该nil动态“动态”重新创建属性或进行nil检查,以释放更多内存。

答案 1 :(得分:1)

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

  1. 您应该将任何用户界面控件设置为nil(因为视图正在卸载)。对weak属性不必要(对于此主题,它们通常应该weakApple guidance},但如果Xcode为您插入,则不是问题。有关viewDidUnload中的操作的指导,请参阅Resource Programming Guide: The Nib Files的“内存警告”部分。

  2. 对于您在viewDidLoad中设置的非用户界面对象,我会谨慎对待nil中的viewDidUnload盲目设置,特别是如果你'不使用ARC(例如,如果您不小心nil实例变量,则可能导致泄漏)。您可能希望平衡将要恢复的内存量与重新检索该数据的“成本”(例如,如果它来自某个远程服务器)。无论如何,我建议您在didReceiveMemoryWarning中处理非UI对象的内存释放。

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