首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ARC和viewDidUnload

ARC和viewDidUnload
EN

Stack Overflow用户
提问于 2012-09-28 08:35:35
回答 2查看 1.1K关注 0票数 3

如果我在我的视图层次结构中有一个对视图的强引用,我是必须在viewDidUnload中将其设置为nil还是由ARC来处理?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-28 22:00:44

在前面的两个答案中有如此多的错误信息,我将确切地澄清情况。请注意,这些是与部署目标相关的,而不是与您是否使用iOS6开发工具包进行构建相关的):

  • 你不用担心self.view - UIViewController管理
  • 顶级对象-即那些不包含在另一个对象中的对象-必须是强的
  • 其他对象应该使用弱(系统nil的ivar当它们被释放时防止崩溃试图使用释放的对象)
  • 对于部署在iOS6 6之前的设备上,使用viewDidUnload来释放顶级对象和任何其他你想要的东西。注意:在此之后不调用dealloc -当导致消息的内存问题消失并且视图重新出现时,您得到的下一条消息很可能是viewDidLoad )

iOS6和更高版本,不要使用viewDidUnload (参见下面的编辑),如果您想释放与视图无关的内存或在所有版本中调用其他UI objects.

  • dealloc,请使用didReceiveMemoryWarning。在ARC中,您不需要调用super,也不需要像过去那样释放内存。

编辑:从iOS6 SDK UIViewController类描述:

当控制器的视图从内存中释放时调用

viewDidUnload。(在iOS 6.0中不推荐使用。在内存不足的情况下,视图不再被清除,因此永远不会调用此方法。)

苹果所做的就是移除后备存储--缓存的像素。他们发现这移除了大部分消耗的内存,而且viewDidUnload的实现很糟糕(他们在2012年的WWDC2012上告诉我们这一点)。

票数 6
EN

Stack Overflow用户

发布于 2012-09-28 08:45:57

如果你有一个拥有一个对象的strong引用的ivar,那么只要ivar指向它,这个对象就会一直挂起。

所以,是的,您需要将指针设置为nil,否则您的强引用将使视图保持活动状态。如果视图是从nib加载的,并且它不是rootView,那么建议使用weak,这样您就不必担心这个问题。

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

https://stackoverflow.com/questions/12632036

复制
相关文章

相似问题

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