didReceiveMemoryWarning和viewDidUnload内存问题

时间:2011-07-27 21:03:05

标签: iphone memory-management

如果选择了一个按钮(我没有在viewDidLoad中创建数据),我会填充3个NSDictionar的NSArray,我是否可以在这两种方法中删除这个内存,或只是其中一种?谢谢!

2 个答案:

答案 0 :(得分:1)

这取决于您何时需要此数据。

  • dealloc中,您应该释放所有保留的ivars。
  • viewDidUnload中,您应该释放在viewDidLoad中重新创建的所有ivars。
    • 例如,您可以将NSDictionary映射ID发布到UIButton,因为这些将在viewDidLoad中重新创建,但保留一个NSDictionary,用于存储选择哪些ID,哪些不是。
  • viewWillDisappearviewDidDisppear中,您可以释放任何包含数据的ivars,只要用户离开并返回到视图,就应该重置这些数据。您可能会或可能不想有条件地执行此操作,具体取决于用户是否因为模态而离开。
  • didReceiveMemoryWarning中,您希望释放为保持更快访问而保留的任何数据,但可以从磁盘重新加载或重新计算。
    • 例如,UIViewController通常会保持其视图,直到它收到didReceiveMemoryWarning,即使视图不再可见。

答案 1 :(得分:0)

您可以使用viewDidUnload来发布视图对象。在这种情况下,你想要在didReceiveMemoryWarning中释放它们,如果它们是ivars(它们可能是;否则你没有引用它们),你也应该在{{dealloc中释放它们。 1}}。