注意:我在这方面看到了一些问题,但似乎没有人澄清我的疑问。
在iOS6之前,所有网点,图像和声音等重量资源都设置为nil
中的viewDidUnload
。发布iOS6后,由于视图不再被卸载,因此情况不再如此。系统调用didReceiveMemoryWarning
,这是建议放置此类资源的新建议位置。
那么如果代码需要支持iOS4以上的所有内容呢?在运行iOS 4和5的设备上,viewDidUnload
仍将被调用。在运行iOS6的设备中,只会调用didReceiveMemoryWarning
。
这是否意味着我必须在两个地方复制代码?在这两个地方调用一种常用方法是一种好方法吗?请提供您对业内处理方式的意见或建议。
答案 0 :(得分:4)
是的,如果您支持6.0之前的iOS版本,则应删除依赖于viewDidUnload
中的视图及其控件的任何内容。它是在设备上运行的iOS的功能。显然,如果设备运行6.0或更高版本,则不会卸载视图。无论如何,你应该在didReceiveMemoryWarning
中清除缓存等。
您不应该复制这两种方法中的代码,因为这是不必要的。在viewDidUnload
中进行与视图相关的清理,在didReceiveMemoryWarning
中进行与缓存相关的清除。而且,最重要的是,不要将viewDidUnload
中的特定于视图的清理(例如将IBOutlet
对nil
的引用,Interface Builder用于添加到我们代码中的内容)复制到{{1} }}。如果您这样做,并且如果您在iOS 6中收到内存警告,那么对于尚未删除的视图,您将丢失didReceiveMemoryWarning
个引用。
请参阅iOS 6 - viewDidUnload migrate to didReceiveMemoryWarning?
答案 1 :(得分:1)
didReceiveMemoryWarning
为available,为什么不为每个人将其从viewDidUnload
移至didReceiveMemoryWarning
?