【问题标题】:How to get the reference count of an NSObject?如何获取 NSObject 的引用计数?
【发布时间】:2010-04-14 19:56:00
【问题描述】:

有没有办法获取 NSObject(即 NSString)的当前引用计数?

【问题讨论】:

    标签: objective-c cocoa


    【解决方案1】:

    retainCount

    但你应该考虑改用CFGetRetainCount

    【讨论】:

    • 不鼓励使用此方法,甚至不能保证返回正确的数字。
    【解决方案2】:

    正如@Ben S 所说,这是retainCount 方法。但是,您问错了问题,因为:

    Important:通常没有理由明确询问对象的保留计数是多少(请参阅retainCount)。结果通常具有误导性,因为您可能不知道哪些框架对象保留了您感兴趣的对象。在调试内存管理问题时,您应该只关心确保您的代码遵守所有权规则。

    所以真正的问题是:为什么需要知道?

    【讨论】:

    • 在dealloc方法上放一个断点。另外,请查看此链接:cocoadev.com/index.pl?NSZombieEnabled
    • 更好的是,使用 Instruments 的 Zombies 模板。
    • 如果您使用的是 10.6,“构建”菜单中的“构建和分析”可能会帮助您找到有问题的代码。
    • 您想知道,因为您正在尝试调试您的应用程序。你不能告诉别人,“你不需要知道,因为你应该做对了,在这种情况下你不会在乎”。也许他们不应该在他们的生产版本中需要代码,但这与不需要知道 ref 计数不同,作为调试问题原因的工具。错误的答案。
    • 不要误会我的意思。仪器很棒。但是,它有局限性,开发人员没有理由仅限于使用 Instruments。如果您的桌面测试环境中没有出现问题怎么办?如果您想将设备部署到现场,并使用日志记录为您提供稍后分析的内容,该怎么办?或者,您的应用程序或问题代码可能存在基于位置的某些内容,这需要您将设备带出办公室。您可能无法将您的开发工作站带到现场。发帖人不需要证明提出问题的合理性。
    【解决方案3】:

    使用CFGetRetainCount函数

    例子:

    print(CFGetRetainCount(object))
    

    阅读更多here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-25
      • 2011-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多