gpt4 book ai didi

ios - viewDidUnload 弃用和向后兼容性

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:23:15 29 4
gpt4 key购买 nike

注意:我看到前面有人问了几个问题,但似乎没有一个能澄清我的疑问。

在 iOS6 之前,所有 socket ,图像和声音等大量资源在 viewDidUnload 中设置为 nil。在 iOS6 之后,情况不再如此,因为 View 不再被卸载。系统调用 didReceiveMemoryWarning,这是放置此类资源中和的新推荐位置。

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

这是否意味着我必须在这两个地方复制代码?在两个地方都调用一个通用方法是一种好方法吗?请提供您的意见或方法,说明业界是如何处理这种情况的。

最佳答案

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

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

参见 iOS 6 - viewDidUnload migrate to didReceiveMemoryWarning?

关于ios - viewDidUnload 弃用和向后兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14470798/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com