如何获取一个NSObject的引用计数?

26

有没有一种方法来获取 NSObject(如 NSString)的当前引用计数?

3个回答

29

1
不建议使用此方法,甚至不能保证返回正确的数字。 - eonil

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

重要提示:通常不需要显式地询问对象的保留计数(参见retainCount)。结果通常是误导性的,因为你可能不知道哪些框架对象已经保留了你感兴趣的对象。在调试内存管理问题时,你应只关心确保你的代码遵循所有权规则。

所以这才是真正的问题:你需要知道吗?


10
在dealloc方法上设置一个断点。 另外,查看此链接:http://www.cocoadev.com/index.pl?NSZombieEnabled - JeremyP
5
最好使用Instruments的Zombies模板。 - Peter Hosey
88
你想知道这个,因为你正在调试应用程序。你不能告诉别人:“你不需要知道,因为你应该直接做对,这样你就不会在意了。”也许他们不应该需要代码来发布产品,但这并不等同于不需要知道引用计数作为一种调试问题的工具。上述回答不好。 - Nate
10
没错,Instruments很棒。但是它有局限性,开发者没有理由只使用Instruments。如果问题并未在您的桌面测试环境中出现怎么办?如果您想将设备部署到现场,并使用日志记录以便稍后分析呢?或者,也许您的应用程序或问题代码与位置有关,需要将设备带出办公室。您可能无法将开发工作站带到现场。海报无需为提出问题进行辩解。 - Nate
1
有时候我发现检查引用计数很方便。特别是它帮助我理解“哪些框架对象保留了我感兴趣的对象”。它也帮助我理解引用计数。 - user234736
显示剩余7条评论

10

使用CFGetRetainCount函数

示例:

print(CFGetRetainCount(object))

在此处阅读更多信息


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接