首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用didReceiveMemoryWarning和viewDidUnload?

如何使用didReceiveMemoryWarning和viewDidUnload?
EN

Stack Overflow用户
提问于 2009-09-22 14:32:39
回答 2查看 3.5K关注 0票数 4

使用这两种方法进行内存管理的最佳实践是什么?我当前的应用程序可以很容易地在内存警告后释放它的视图,因为它需要大量内存。在这些方法中我需要做些什么?我在我的应用程序中使用了各种nib,并且我将它们中的对象连接到我的视图控制器,而不保留它们。从笔尖加载视图时,我需要保留笔尖对象吗?为什么?我在文档中看到了OS3.0的变化,我说的只是3.0

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-22 23:48:59

如果您只是在谈论iOS 3.0,那么在viewDidUnload中释放任何您可以轻松重新创建的对象。然后,可以从viewDidLoad中的nib重新创建或重新加载它们。确保在释放对象时,要么将它们设为空,要么让setter这样做。这样,您就可以在重新加载或重新创建之前使用viewDidLoad检查是否为空。

至于从nib对象加载,如果要加载到属性中,并将其设置为保留,则不必再次保留。

来自Apple

UIViewController类通过其didReceiveMemoryWarning (第20页)方法提供了一些内存不足情况的自动处理,该方法会释放不需要的内存。

在iPhone OS 3.0之前,此方法是释放与自定义视图控制器类相关的额外内存的唯一方法,但在iPhone OS 3.0及更高版本中,viewDidUnload (第30页)方法可能更适合满足大多数需求。当发生内存不足警告时,如果UIViewController类知道以后可以重新加载或重新创建视图,则它会清除视图。如果发生这种情况,它还会调用viewDidUnload方法,让您的代码有机会放弃与视图层次结构关联的任何对象的所有权,包括使用nib文件加载的对象、在viewDidLoad (第29页)方法中创建的对象,以及在运行时延迟创建并添加到视图层次结构中的对象。通常,如果视图控制器包含插座(包含IBOutlet关键字的属性或原始变量),则应使用viewDidUnload方法放弃对这些插座或不再需要的任何其他与视图相关的数据的所有权。

票数 4
EN

Stack Overflow用户

发布于 2013-01-02 09:07:21

从iOS 6开始,将不再调用viewDidUnload。来自Apple

在iOS 6之前,当出现内存不足警告时,如果UIViewController类知道以后可以重新加载或重新创建视图,则会清除这些视图。如果发生这种情况,它还会调用viewWillUnloadviewDidUnload方法,使您的代码有机会放弃与视图层次结构相关联的任何对象的所有权,包括从nib文件加载的对象、在viewDidLoad方法中创建的对象以及在运行时延迟创建并添加到视图层次结构中的对象。在iOS 6上,视图永远不会被清除,这些方法也永远不会被调用。如果您的视图控制器需要在内存不足时执行特定任务,它应该覆盖didReceiveMemoryWarning方法。

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

https://stackoverflow.com/questions/1460450

复制
相关文章

相似问题

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