首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >didReceiveMemoryWarning (in iOS 3.0+)

didReceiveMemoryWarning (in iOS 3.0+)
EN

Stack Overflow用户
提问于 2011-05-21 08:17:19
回答 1查看 269关注 0票数 1

查看一下didReceiveMemoryWarning的文档:

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html

注意它是怎么写的,我引用如下:

3.0和更高版本中,如果视图控制器保存对视图层次结构中对象的引用,则应该在viewDidUnload方法中释放这些引用。在早期版本的iOS中,您应该继续从这个方法中释放它们。

为什么是这种情况?是什么改变了iOS 3.0,使视图层次结构视图不能在didReceiveMemoryWarning中被直接清除?我想不出有什么能让这件事变得危险或糟糕。

伙计们有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-21 08:30:28

在iOS 3.0中,介绍了viewDidUnloadviewDidLoad

如果你看看他们的描述,你会发现:

在视图控制器将关联视图加载到内存后调用的

viewDidLoad。无论视图是存储在nib文件中还是以编程方式在loadView方法中创建,都会调用此方法。

这意味着,无论是从Nib加载视图,还是以编程方式创建视图(框架在适当的时候调用loadView),都有一个点可以访问新视图并完成它的初始化,比如添加子视图,或者任何您需要的内容。

viewDidLoad的对应对象是viewDidUnload,您可以这样重写它:

代码语言:javascript
复制
-(void)viewDidUnload {
     <do all the necessary clean up>
    [super viewDidUnload];
}

因此,您有一个单独的清理点,并且您不需要在didReceiveMemoryWarning中执行任何特定的清理,因为每当一个视图被解除分配时,都会调用viewDidUnload,也就是当视图由于didReceiveMemoryWarning而被解除分配时。

这与以前在iOS 3.0中发生的情况不同,在这种情况下,您必须提出自己的方案来完成初始化和清理,而不需要框架的支持,即当didReceiveMemoryWarning导致视图被解除分配时,清理方法不会被自动调用,您必须复制清理代码(并在didReceiveMemoryWarning中显式地进行清理)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6080502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档