如何获取NSObject的引用计数?

zer*_*lus 25 cocoa objective-c

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

Ben*_*n S 28

retainCount

但你应该考虑CFGetRetainCount改用


Dav*_*ong 25

正如@Ben S所说,这是retainCount方法.但是,你问的是错误的问题,因为:

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

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

  • 您想知道,因为您正在尝试调试您的应用程序.你不能告诉别人,"你不需要知道,因为你应该做得对,在这种情况下你不会在乎".也许他们不应该在他们的生产版本中需要代码,但这与不需要知道引用计数不同,作为调试你遇到问题的原因的工具.答案不好. (77认同)
  • 别误会我的意思.仪器很棒.但是,它有局限性,开发人员没有理由仅限于使用仪器.如果问题没有出现在桌面测试环境中怎么办?如果您想将设备部署到现场并使用日志记录为您提供以后要分析的内容,该怎么办?或者可能存在一些基于位置的关于您的应用或问题代码的内容,这需要您将设备带出办公室.您可能无法将开发工作站带入现场.海报不需要证明提问. (10认同)
  • 在dealloc方法上设置一个断点.另外,请查看以下链接:http://www.cocoadev.com/index.pl?NSZombieEnabled (9认同)
  • 更好的是,使用Instruments的Zombies模板. (5认同)

Tri*_*tmm 8

使用CFGetRetainCount功能

示例:

print(CFGetRetainCount(object))
Run Code Online (Sandbox Code Playgroud)

在这里阅读更多.