viewDidUnload弃用和向后兼容性

时间:2013-01-23 01:01:09

标签: ios objective-c memory-management

注意:我在这方面看到了一些问题,但似乎没有人澄清我的疑问。

在iOS6之前,所有网点,图像和声音等重量资源都设置为nil中的viewDidUnload。发布iOS6后,由于视图不再被卸载,因此情况不再如此。系统调用didReceiveMemoryWarning,这是建议放置此类资源的新建议位置。

那么如果代码需要支持iOS4以上的所有内容呢?在运行iOS 4和5的设备上,viewDidUnload仍将被调用。在运行iOS6的设备中,只会调用didReceiveMemoryWarning

这是否意味着我必须在两个地方复制代码?在这两个地方调用一种常用方法是一种好方法吗?请提供您对业内处理方式的意见或建议。

2 个答案:

答案 0 :(得分:4)

是的,如果您支持6.0之前的iOS版本,则应删除依赖于viewDidUnload中的视图及其控件的任何内容。它是在设备上运行的iOS的功能。显然,如果设备运行6.0或更高版本,则不会卸载视图。无论如何,你应该在didReceiveMemoryWarning中清除缓存等。

您不应该复制这两种方法中的代码,因为这是不必要的。在viewDidUnload中进行与视图相关的清理,在didReceiveMemoryWarning中进行与缓存相关的清除。而且,最重要的是,不要将viewDidUnload中的特定于视图的清理(例如将IBOutletnil的引用,Interface Builder用于添加到我们代码中的内容)复制到{{1} }}。如果您这样做,并且如果您在iOS 6中收到内存警告,那么对于尚未删除的视图,您将丢失didReceiveMemoryWarning个引用。

请参阅iOS 6 - viewDidUnload migrate to didReceiveMemoryWarning?

答案 1 :(得分:1)

在iOS 2.0及更高版本中,

didReceiveMemoryWarningavailable,为什么不为每个人将其从viewDidUnload移至didReceiveMemoryWarning