gpt4 book ai didi

iphone - 我到底必须在 viewDidUnload 中做什么?

转载 作者:行者123 更新时间:2023-12-03 18:19:48 27 4
gpt4 key购买 nike

我倾向于在 -dealloc 中释放我的东西,现在 iPhone OS 3.0 引入了这个有趣的 -viewDidUnload 方法,他们说:

// Release any retained subviews of the main view. // e.g. self.myOutlet = nil;

因此,当 View Controller 的 View 从内存中启动时,-viewDidUnload 似乎会被调用。如果我将 subview 附加到 View Controller 的主视图,我必须只在此处释放这些内容,而不是在 -dealloc 中释放?

这很令人困惑。另外,如果 -dealloc 导致 View 被卸载(释放)怎么办?那么,它又会调用-viewDidUnload?

我确实意识到了区别, -viewDidUnload 仅适用于 View 本身被杀死的情况,但 View Controller 保留在内存中。 -dealloc 适用于整个内容都变成垃圾的情况。

也许有人可以消除困惑。

最佳答案

这里的目的是“平衡”您的 subview 管理。您在 viewDidLoad 中创建的任何内容应该在viewDidUnload发布。这使得跟踪应该在哪里发布什么内容变得更加容易。在大多数情况下,您的dealloc方法是你的 init 的镜像方法,以及你的viewDidUnload将是您的 viewDidLoad 的镜像方法。

正如您所指出的,viewDid ...方法将在 View 本身加载和卸载时使用。这允许一种使用模式,其中 View Controller 保持加载在内存中,但 View 本身可以根据需要加载和卸载:

init
viewDidLoad
viewDidUnload
viewDidLoad
viewDidUnload
...
dealloc

当然,在你的 dealloc 中释放东西并没有什么坏处。方法也是如此,只要将它们设置为 nil当您在 viewDidUnload 中释放它们时.

以下引用自 Apple UIViewController documentation 的内存管理部分,更详细地描述它:

...in iPhone OS 3.0 and later, the viewDidUnload method may be a more appropriate place for most needs.

When a low-memory warning occurs, the UIViewController class purges its views if it knows it can reload or recreate them again later. If this happens, it also calls the viewDidUnload method to give your code a chance to relinquish ownership of any objects that are associated with your view hierarchy, including objects loaded with the nib file, objects created in your viewDidLoad method, and objects created lazily at runtime and added to the view hierarchy. Typically, if your view controller contains outlets (properties or raw variables that contain the IBOutlet keyword), you should use the viewDidUnload method to relinquish ownership of those outlets or any other view-related data that you no longer need.

关于iphone - 我到底必须在 viewDidUnload 中做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2261972/

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