我倾向于在 -dealloc 中释放我的东西,现在 iPhone OS 3.0 引入了这个有趣的 -viewDidUnload 方法,他们说:
// 释放所有保留的子视图
主要视图。 // 例如自我我的出口
= 零;
因此,当视图控制器的视图从内存中启动时,-viewDidUnload 似乎会被调用。如果我将子视图附加到视图控制器的主视图,我必须仅在此处释放这些内容,但也不能在 -dealloc 中释放?
这很令人困惑。另外,如果 -dealloc 导致视图被卸载(释放)怎么办?那么,它又会调用-viewDidUnload?
我确实意识到了区别, -viewDidUnload 仅适用于视图本身被杀死的情况,但视图控制器保留在内存中。 -dealloc 适用于整个东西都变成垃圾的情况。
也许有人可以消除困惑。
这里的目的是“平衡”您的子视图管理。您创建的任何内容viewDidLoad
应该发布于viewDidUnload
。这使得跟踪应该在哪里发布什么内容变得更加容易。在大多数情况下,您的dealloc
方法是你的镜像init
方法,以及你的viewDidUnload
将成为你的镜像viewDidLoad
method.
正如您所指出的,viewDid
...方法将在视图本身加载和卸载时使用。这允许一种使用模式,其中视图控制器保持加载在内存中,但视图本身可以根据需要加载和卸载:
init
viewDidLoad
viewDidUnload
viewDidLoad
viewDidUnload
...
dealloc
当然,释放你的东西也没什么坏处。dealloc
方法也是如此,只要你将它们设置为nil
当你释放它们时viewDidUnload
.
以下引用自Apple的内存管理部分UIViewController文档 http://developer.apple.com/iPhone/library/documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006926-CH3-DontLinkElementID_1,更详细地描述它:
...在 iPhone OS 3.0 及更高版本中,viewDidUnload 方法可能更适合大多数需求。
当发生内存不足警告时,如果 UIViewController 类知道可以稍后重新加载或重新创建视图,则它会清除其视图。如果发生这种情况,它还会调用 viewDidUnload 方法,让您的代码有机会放弃与视图层次结构关联的任何对象的所有权,包括使用 nib 文件加载的对象、在 viewDidLoad 方法中创建的对象以及延迟创建的对象运行时并添加到视图层次结构中。通常,如果您的视图控制器包含插座(包含 IBOutlet 关键字的属性或原始变量),则应使用 viewDidUnload 方法放弃这些插座或您不再需要的任何其他视图相关数据的所有权。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)