代码之家  ›  专栏  ›  技术社区  ›  Erik B

如何判断引用的对象是否已在objective-c中解除分配?

  •  1
  • Erik B  · 技术社区  · 16 年前

    升级到iPhoneOS4.0后,在应用程序之间切换后,应用程序开始崩溃。当应用程序收到内存警告时,应用程序会在同一位置崩溃。

    似乎有些对象在收到内存警告时会自动解除分配,然后当我们尝试使用解除分配的对象时,应用程序就会崩溃。

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

    3 回复  |  直到 16 年前
        1
  •  6
  •   TechZen    16 年前

    无法测试特定对象是否已解除分配,因为解除分配后,该对象不再存在。唯一可以做的就是测试另一个对象对可疑对象的引用是否仍然是非nil。

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

    编辑

    我要补充的是,内存不足崩溃的最常见原因是假设视图或视图中的资源始终存在,即使视图没有显示。系统将清除内存不足的未显示视图及其资源(如图像)。检查 didReceiveMemoryWarning

        2
  •  4
  •   gran33    12 年前

    -(void)dealloc { ... }
    

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

    这个答案是正确的 ARC 和 NON-ARC

        3
  •  2
  •   Alex Cio Olie    9 年前
    1. UIViewController 看看它从记忆中被释放的那一刻

      - (void) dealloc

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

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

    然后在要测试对象是否仍然存在的位置设置断点。如果遇到断点,请使用检查调试器中的objects指针

    `po [pointer_printed_before]
    

    enter image description here

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

    推荐文章