1

升级到 iPhone OS 4.0 后,在应用程序之间切换后应用程序开始崩溃。当应用程序收到内存警告时,应用程序在同一个地方崩溃。

当收到内存警告时,似乎某些对象会自动释放,然后当我们尝试使用释放的对象时,应用程序会崩溃。

是否可以测试一个对象是否已被释放,以便我们可以重新分配它们?

4

3 回答 3

6

您无法测试特定对象是否已被释放,因为在释放后,该对象不再存在。您唯一能做的就是测试来自另一个对象的对可疑对象的引用是否仍然非零。

您在这里的问题不是释放本身,而是管理不善的保留。您有一个已被标记为不再使用的对象,系统正在按照系统应有的方式杀死它。您在低内存期间看到它的唯一原因是系统立即停止并耗尽所有释放池,而不是等待正常循环。

您需要确保已正确保留所需的所有对象,以免它们被不当释放。即使在内存不足的情况下,保留的对象也不会被释放。

编辑

我要补充一点,低内存崩溃的最常见原因是假设视图或视图中的资源始终存在,即使视图未显示也是如此。系统将清除低内存中未显示的视图及其资源(如图像)。检查didReceiveMemoryWarning视图控制器。

于 2010-06-30T13:25:36.403 回答
4

你可以加

-(void)dealloc { ... }

如果它是正确的,则将其留空,并在其中添加断点。

这个答案正确ARCNON-ARC

于 2014-02-18T12:25:15.850 回答
2
  1. 在 a 中实现方法 deallocUIViewController以查看它从内存中释放的时刻

    - (void) dealloc

  2. 打印您要测试的任何对象的引用。

    NSLog("Get pointer: %@", self); // ViewController

然后在要测试对象是否仍然存在的地方设置一个断点。如果遇到断点,请检查调试器中的对象指针

`po [pointer_printed_before]

在此处输入图像描述

在这里你可以看到,指针不再可用,dealloc方法打印日志后不再有对象。

于 2017-01-23T16:42:47.303 回答