鉴于我们正在使用ARC编写代码,nil
中的viewDidUnload
属性是否应该实例化:
XIB(这里的nilling有时是从IDE生成的)
并且没有IBOutlet
答案 0 :(得分:1)
您的一般规则:
nil
仅限strong IBOutlets
。单独留下weak
个。nil
在viewDidLoad
中实例化的所有媒体资源,不 init
,initWithCoder:
和initWithNibName:bundle:
。您还应该nil
动态“动态”重新创建属性或进行nil
检查,以释放更多内存。
答案 1 :(得分:1)
viewDidUnload
的目的是让您的应用程序有机会删除对可能不再存在的用户界面对象的引用,因为视图在收到内存警告时被删除。因此:
您应该将任何用户界面控件设置为nil
(因为视图正在卸载)。对weak
属性不必要(对于此主题,它们通常应该weak
每Apple guidance},但如果Xcode为您插入,则不是问题。有关viewDidUnload
中的操作的指导,请参阅Resource Programming Guide: The Nib Files的“内存警告”部分。
对于您在viewDidLoad
中设置的非用户界面对象,我会谨慎对待nil
中的viewDidUnload
盲目设置,特别是如果你'不使用ARC(例如,如果您不小心nil
实例变量,则可能导致泄漏)。您可能希望平衡将要恢复的内存量与重新检索该数据的“成本”(例如,如果它来自某个远程服务器)。无论如何,我建议您在didReceiveMemoryWarning
中处理非UI对象的内存释放。
在我看来,我认为viewDidUnload
有机会确保我不维护对可能不再存在的用户界面对象的引用,并使用didReceiveMemoryWarning
清空缓存或其他非缓存-UI相关的项目,我可以安全地清除以恢复一些内存。如果你担心iOS 6,请注意viewDidUnload
的处理可能正在发生变化,虽然NDA阻止我们公开讨论,但我可能会建议您参考{{3}并查找对viewDidUnload
的引用。