如果我在我的视图层次结构中有一个对视图的强引用,我是必须在viewDidUnload中将其设置为nil还是由ARC来处理?
发布于 2012-09-28 22:00:44
在前面的两个答案中有如此多的错误信息,我将确切地澄清情况。请注意,这些是与部署目标相关的,而不是与您是否使用iOS6开发工具包进行构建相关的):
iOS6和更高版本,不要使用viewDidUnload (参见下面的编辑),如果您想释放与视图无关的内存或在所有版本中调用其他UI objects.
编辑:从iOS6 SDK UIViewController类描述:
当控制器的视图从内存中释放时调用
viewDidUnload。(在iOS 6.0中不推荐使用。在内存不足的情况下,视图不再被清除,因此永远不会调用此方法。)
苹果所做的就是移除后备存储--缓存的像素。他们发现这移除了大部分消耗的内存,而且viewDidUnload的实现很糟糕(他们在2012年的WWDC2012上告诉我们这一点)。
发布于 2012-09-28 08:45:57
如果你有一个拥有一个对象的strong引用的ivar,那么只要ivar指向它,这个对象就会一直挂起。
所以,是的,您需要将指针设置为nil,否则您的强引用将使视图保持活动状态。如果视图是从nib加载的,并且它不是rootView,那么建议使用weak,这样您就不必担心这个问题。
https://stackoverflow.com/questions/12632036
复制相似问题