【问题标题】:Check whether an object was released or not检查对象是否被释放
【发布时间】:2011-11-16 00:31:09
【问题描述】:

我的申请有点混乱。

我如何检查一个对象是否在 iPhone 中被释放?

【问题讨论】:

  • 你不会检查它,你最好以你知道你的对象是否被释放的方式管理内存

标签: iphone cocoa-touch memory-management


【解决方案1】:

如果对象已被释放,则您无法访问其属性。

您可以使用 Profiler (NSZombies) 来检测哪些对象被释放然后被访问。

【讨论】:

    【解决方案2】:

    抱歉,您正在尝试解决错误的问题。

    如果您遵循一些简单的规则,则绝对不需要“找出”一个对象是否已被释放;你会知道的。

    简单的规则是:

    • 如果您分配、复制或保留一个对象,那么您有责任释放它
    • 否则,您负责发布它

    不要使用retainCount。如果对象已被释放(即其保留计数为零),那么您不能对对象执行任何操作,因为它不再存在!另外,即使它当前是一,那它不在自动释放池中并且在你下次查看时将是零,那又如何呢?

    【讨论】:

      【解决方案3】:

      启用僵尸时向对象发送任何消息就足够了。如果程序因为您向僵尸发送消息而崩溃,那么您知道!

      如果您在仪器中启用了引用计数跟踪,那么您可以查看每个引用计数事件的每一帧,并找出引入无效引用计数偏移的位置。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-11
        • 2011-08-09
        • 1970-01-01
        相关资源
        最近更新 更多