如何获取 NSObject 的引用计数?
Posted
技术标签:
【中文标题】如何获取 NSObject 的引用计数?【英文标题】:How to get the reference count of an NSObject? 【发布时间】:2010-04-14 19:56:00 【问题描述】:有没有办法获取 NSObject(即 NSString)的当前引用计数?
【问题讨论】:
【参考方案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。
【讨论】:
以上是关于如何获取 NSObject 的引用计数?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 NSObject 类获取导航控制器并在 ios 中推送视图控制器