3

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

在 iOS6 之前,所有网点、图像和声音等大量资源都设置nilviewDidUnload. 在 iOS6 之后,由于不再卸载视图,因此不再是这种情况。系统调用didReceiveMemoryWarning,这是放置此类资源中和的新推荐位置。

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

这是否意味着我必须在两个地方复制代码?在这两个地方调用一个通用方法是一个好方法吗?请就行业中如何处理此问题提供您的意见或方法。

4

2 回答 2

4

是的,如果您支持 6.0 之前的 iOS 版本,您应该删除任何依赖于视图及其控件的viewDidUnload. 这是设备上运行的 iOS 的一项功能。显然,如果设备运行的是 6.0 或更高版本,则视图不会被卸载。无论如何,您应该清除didReceiveMemoryWarning.

您不应该在这两种方法中复制代码,因为这是不必要的。在 中执行与视图相关的清理viewDidUnload和与缓存相关的清除didReceiveMemoryWarning。而且,最重要的是,不要将特定于视图的清理从viewDidUnload(例如设置IBOutlet对 的引用nil,Interface Builder 用来添加到我们代码中的东西)复制到didReceiveMemoryWarning. 如果这样做,并且在 iOS 6 中收到内存警告,您将丢失IBOutlet未删除的视图的引用。

请参阅iOS 6 - viewDidUnload 迁移到 didReceiveMemoryWarning?

于 2013-01-23T01:21:22.880 回答
1

didReceiveMemoryWarning可在 iOS 2.0 及更高版本中使用,那么为什么不将它从 移动viewDidUnloaddidReceiveMemoryWarning为所有人?

于 2013-01-23T01:05:39.283 回答