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

最佳答案

之前的两个答案中有太多错误信息,我将澄清具体情况。请注意,这些是相对于 DEPLOYMENT 目标而言的,与您是否使用 iOS6 SDK 构建无关):

  • 你不用担心 self.view - UIViewController 管理
  • 顶级对象 - 即那些不包含在另一个对象中的对象 - 必须是强大的
  • 其他对象应该使用weak(当它们被释放时,系统nil 是ivar 以防止尝试使用已释放的对象时崩溃)
  • 用于在 iOS6 之前的设备上部署,使用 viewDidUnload 释放顶级对象和任何你想要的。注意:在此之后不会调用 dealloc - 您收到的下一条消息很可能是 viewDidLoad,当导致消息的内存问题消失并且 View 重新出现时)
  • 适用于 iOS6 及更高版本,不要使用 viewDidUnload(请参阅下面的编辑),如果您想释放与 View 或其他 UI 对象无关的内存,请使用 didReceiveMemoryWarning。
  • dealloc 在所有版本中都被调用。使用 ARC,您不会调用 super,也不会像过去那样释放内存。

  • 编辑:来自 iOS6 SDK UIViewController 类描述:



    Apple 所做的是删除后备存储 - 缓存的像素。他们发现这消除了大部分消耗的内存,并且 viewDidUnload 的实现很差(他们在 WWDC 2012 上告诉我们这一点)。

    关于objective-c - ARC 和 viewDidUnload,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12632036/

    10-13 04:02