1

我必须使用 didRecieveMemoryWarning 方法进行到底。我已经在这个论坛上阅读了大约 30 个关于这个主题的主题。每个答案都是不同的。

  1. 第一个问题。您应该在 didRecieveMemoryWarning 中释放对象还是将它们设置为 nil?或两者?

  2. 我已经读过我应该在 didRecieveMemoryWarning 方法中释放 tableView 数据源,如果你有的话。我还读到你应该在这个方法中发布 IBOutlets。我很困惑,这里什么是正确的?

  3. 只有我在 viewDidLoad 中启动的对象我应该在 didRecieveMemoryWarning 中释放吗?或者是我刚刚分配给的属性,例如:labelTitleText.text = @"Woodie Guthrie"?labelTitleText 是我的头文件中的一个属性。

在我今天的应用程序中,我在我的dealloc方法中发布了所有内容(也像上面的示例一样分配了标签)。这感觉不对。

我真的很感激一个小代码示例,这样它就更容易理解了,这是其他线程所缺少的,我注意到了。

祝大家有个美好的一天!

4

2 回答 2

2

当手机内存不足时调用 didRecieveMemoryWarning。您应该释放以后可以在需要时检索的任何资源。想想缓存、未使用的对象和诸如此类的东西。

我的理解是你不应该在 didRecieveMemoryWarning 中释放 IBOutlets 等,因为这些是应用程序正常工作所必需的。

但是,您应该在 viewDidUnload 之类的方法中释放它们,当然也应该在您所说的 dealloc 中释放它们。(如果您在某个时候保留了它们,很可能是使用属性)

于 2010-10-06T07:29:57.890 回答
2

最重要的是,当您收到内存警告时,您实际上不需要释放任何内容。然而,什么都不做会大大增加某些应用程序被杀死的可能性,而该应用程序可能是你的。但它可能不是。

如果您实际上正在使用您分配的所有内存(例如,不是您可以稍后重新加载的图像等),那么什么都不做(或保存重要状态以防万一),并希望其他一些后台进程被杀死或饿死。执行此操作的应用程序比您想象的要多。

如果您确实有可以发布的内容,请发布大的内容(至少 1 个 VM 页或更大)。释放小东西(短字符串等)对于某些后台应用程序是否被杀死或饿死几乎没有影响。

在不释放内存(或释放对象)的情况下将指针(或对象)设置为 nil 是非常糟糕的形式,因为这只会泄漏内存并增加发生坏事的可能性。您可以在释放/释放内存/对象后将它们设置为 nil。

于 2010-10-06T07:53:24.573 回答