如何获取 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 的引用计数?的主要内容,如果未能解决你的问题,请参考以下文章

再次理解ARC引用计数

如何从 NSObject 类获取导航控制器并在 ios 中推送视图控制器

从 Xamarin 中的 UbiquityIdentityToken 的 NSObject 中获取 id

除非在后台线程中获取新的引用,否则潜在的引用计数问题

如何获取字符串中'#'的计数? [复制]

是否可以获取对象引用计数?