gpt4 book ai didi

iphone - didReceiveMemoryWarning 和 viewDidUnload

转载 作者:行者123 更新时间:2023-12-03 18:28:34 26 4
gpt4 key购买 nike

摘自 Apple 的 View Controller 编程指南/高效管理内存;

didReceiveMemoryWarning

Use this method to deallocate all noncritical custom data structures associated with your view controller. Although you would not use this method to release references to view objects, you might use it to release any view-related data structures that you did not already release in your viewDidUnload method. (The view objects themselves should always be released in the viewDidUnload method.)

viewDidUnload

You can use the viewDidUnload method to deallocate any data that is view-specific and that can be recreated easily enough if the view is loaded into memory again. If recreating the data might be too time-consuming, though, you do not have to release the corresponding data objects here. Instead, you should consider releasing those objects in your didReceiveMemoryWarning method.

http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/BasicViewControllers/BasicViewControllers.html

  1. 对于 didReceiveMemoryWarning,建议我们释放非关键数据结构。那么,什么是关键的,什么是非关键的?

  2. 此外,它还表示要释放我们在 viewDidUnload 中尚未释放的内容。但是,当出现内存警告 didReceiveMemoryWarning 被调用并且 View 可以被卸载时, viewDidUnload 被调用。那么,它是在谈论将这些代码移动到前一个事件的方法(didReceiveMemoryWarning)还是我遗漏了有关事件顺序的信息?

  3. 对于 viewDidUnload,建议我们在重新加载 View 时轻松关心重新创建数据。那么,如果一个 View 正在使用中并且无法卸载,为什么我们要在didReceiveMemoryWarning中释放耗时的数据呢?这些数据发布后,当用户尝试在当前 View 中执行某些操作时,加载它们也会很耗时。

最佳答案

首先,这些只是指导原则,因此,如果您认为在 didReceiveMemoryWarning 中释放某些内容没有什么意义,那么就不要这样做。但请记住,如果您的应用程序是首先导致内存警告的应用程序,那么它最终将被操作系统终止。

回复 (1):关键与非关键完全由您决定。只有您才能真正确定您所持有的哪些数据是您认为至关重要的。尽管它可能与您的 (3) 密切相关,也就是说,易于重新创建的东西可能不太重要。

回复 (2):我不认为该语句涉及调用顺序。正如您所意识到的,一般来说,viewDidUnload将在didReceiveMemoryWarning之后被调用(因为didReceiveMemoryWarning可能导致viewDidUnload被称为)。例如,在 viewDidUnload 中,我们将从 Nib 释放对 UI 元素的引用。因此,不要在 didReceiveMemoryWarning 中释放它们。

回复 (3):如果某个 View 正在使用中,因此无法卸载,那么是的,显然在 didReceiveMemoryWarning 中释放它不一定有多大意义。但是,您实际上可能会遇到无法卸载 View 的情况,但已知 View 不可见(不太正常),在这种情况下,卸载其数据并在 View 再次可见时重新创建它可能是有意义的.

此外,我同意“相反,您应该考虑...”的言论有点奇怪,但我再次认为建议在 didReceiveMemoryWarning 中发布数据的目的源于以下事实:如果您收到这些警告,那么您自己的应用程序可能面临被终止的危险。因此,虽然目前的情况是 viewDidUnload 可能总是由于内存警告而被调用,但将来可能并不总是这样,因此从概念上讲,释放数据更有意义didReceiveMemoryWarning 本身。在 didReceiveMemoryWarning 中,您知道存在内存压力,而在 viewDidUnload 中,您可能不知道。因此,虽然重新创建数据的成本确实很高,但这可能比终止应用程序要好。对于用户来说,应用程序似乎崩溃了。

我个人对这些方法的处理方法通常是这样的:

  • viewDidUnload - 释放对从 Nib 加载的 UI 元素的所有引用。释放我自己在 viewDidLoad 中创建的所有 UI 元素。
  • didReceiveMemoryWarning - 释放 UI 演示中使用的所有数据,如果/当再次调用 viewDidLoad(或某些其他应用程序特定事件)时,我可以重新创建这些数据。不要发布任何我无法重新创建的内容。

关于iphone - didReceiveMemoryWarning 和 viewDidUnload,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4354332/

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