查看一下didReceiveMemoryWarning的文档:
http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html
注意它是怎么写的,我引用如下:
在
3.0和更高版本中,如果视图控制器保存对视图层次结构中对象的引用,则应该在viewDidUnload方法中释放这些引用。在早期版本的iOS中,您应该继续从这个方法中释放它们。
为什么是这种情况?是什么改变了iOS 3.0,使视图层次结构视图不能在didReceiveMemoryWarning中被直接清除?我想不出有什么能让这件事变得危险或糟糕。
伙计们有什么想法吗?
发布于 2011-05-21 08:30:28
在iOS 3.0中,介绍了viewDidUnload和viewDidLoad。
如果你看看他们的描述,你会发现:
在视图控制器将关联视图加载到内存后调用的
viewDidLoad。无论视图是存储在nib文件中还是以编程方式在loadView方法中创建,都会调用此方法。
这意味着,无论是从Nib加载视图,还是以编程方式创建视图(框架在适当的时候调用loadView),都有一个点可以访问新视图并完成它的初始化,比如添加子视图,或者任何您需要的内容。
viewDidLoad的对应对象是viewDidUnload,您可以这样重写它:
-(void)viewDidUnload {
<do all the necessary clean up>
[super viewDidUnload];
}因此,您有一个单独的清理点,并且您不需要在didReceiveMemoryWarning中执行任何特定的清理,因为每当一个视图被解除分配时,都会调用viewDidUnload,也就是当视图由于didReceiveMemoryWarning而被解除分配时。
这与以前在iOS 3.0中发生的情况不同,在这种情况下,您必须提出自己的方案来完成初始化和清理,而不需要框架的支持,即当didReceiveMemoryWarning导致视图被解除分配时,清理方法不会被自动调用,您必须复制清理代码(并在didReceiveMemoryWarning中显式地进行清理)。
https://stackoverflow.com/questions/6080502
复制相似问题