iOS - 未调用viewDidUnload,但调用didReceiveMemoryWarning

时间:2012-10-09 04:45:48

标签: ios memory-management didreceivememorywarning viewdidunload

尝试寻找某些设备崩溃的原因。我注意到我的视图控制器正在接收didReceiveMemoryWarning,但不是viewDidUnload。根据Apple的说法:

  

您不会使用didReceiveMemoryWarning来释放对视图对象的引用,您可以使用它来释放您在viewDidUnload方法中尚未发布的任何与视图相关的数据结构。 (视图对象本身应始终在viewDidUnload方法中释放。)

所以,

答:为什么没有调用viewDidUnload?如果从未调用过我的视图对象,我无法将其删除。

B:如果我不打算在didReceiveMemoryWarning删除我的视图对象,我还能在哪里删除它?

C:使用ARC,我是否还需要删除视图对象,将数组设置为nil等?

3 个答案:

答案 0 :(得分:2)

正如其他提到的viewDidUnload:在iOS 6中已被弃用。但作为您应该知道的其他信息,由于iOS 6在后台执行其神奇的事情,因此很少需要卸载UIView -it正在销毁视图的后备CALayer的位图图层(这是迄今为止UIView的最大“部分”)。如果再次需要该视图,iOS将会在您撰写视图的地方调用drawRect:,一切都会正常。

欲了解更多信息,请阅读Joe Conway的这篇精彩文章:ViewController lifecycle in iOS 6

答案 1 :(得分:1)

在iOS6中不推荐使用

viewDidUnload。如果您认为有必要,可以“删除didReceiveMemoryWarning中的观看次数,但这取决于您。”

此主题也可能有所帮助。

viewDidUnload no longer called in ios6

答案 2 :(得分:0)

didReceiveMemoryWarning专门针对视图的卸载,而不是视图控制器释放可以轻松重新创建的对象(即UIIamges等)。除非可以根据需要轻松地重新创建对象,否则不应在视图中释放对象。