【问题标题】:How to check the retain count while debugging调试时如何检查保留计数
【发布时间】:2011-11-14 11:54:15
【问题描述】:

有人知道在调试模式下如何检查对象的保留计数吗?我试图添加一个表达式[objInstance retainCount],但它不起作用。我也在控制台中尝试了 print object PO [objInstance retainCount],但它再次不起作用。

【问题讨论】:

  • 检查this descriptive post out 这个答案是今年年初提供的,但是有详细说明为什么不使用retain count
  • 永远不要使用retainCount!如果您想检查内存泄漏,请改用 xcode 内存泄漏工具
  • 这里的“没用”是什么意思?
  • “不起作用”是指表达式没有给我保留计数。它显示[objInstance retainCount] = (<unknown type>) <unknown type>
  • 感谢詹姆斯韦伯斯特的参考

标签: iphone objective-c ios debugging retaincount


【解决方案1】:

我猜你是说在GDB 中获取retainCount

您可以使用retainCount 方法。

这就是我进入我的代码的方式。

(gdb) p (int)[product retainCount]
$2 = 4

希望这是您正在寻找的。

【讨论】:

  • 是的 .. 实际上,使用 (int) 强制转换它甚至可以在调试表达式中使用。谢谢!
【解决方案2】:

你可以用这个打印出来

NSLog(@"Retain count might be %d",[objInstance retainCount]);

但是,由于autorelease 之类的原因,这个数字并不可靠。您应该阅读memory management 并确保您的retainrelease 调用匹配。您还可以运行 Build/Build and Analyze 来获取 Xcode 以帮助您找到可能的内存泄漏,但同样,这些只是潜在的泄漏。您需要自己检查每一个以确保确定。

【讨论】:

  • 是的,曾经使用retainCount,它的值不能保证有意义。
  • 感谢@Bavarious 的参考,它非常有用。我知道自动释放池,但是我很安全,因为没有?由于我只有一个应用程序默认的自动释放池,因此它们只会在应用程序结束时自动释放。
  • @mrd 不是。 Cocoa 在每个事件循环开始时创建一个自动释放池,并在每个事件循环结束时将其排出;见documentation。主要问题是很难确定对象何时被自动释放,这会影响其保留计数。
  • @Bavarious 谢谢。我已经阅读了文档,但是现在我对何时创建和销毁事件循环感到困惑(即何时创建和耗尽自动释放队列)我读到这些发生在例如点击事件上,当加载新视图时也会发生这种情况吗比如当一个模态视图控制器被呈现和关闭时,以及当视图控制器被推入/弹出导航堆栈时?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-21
  • 2013-02-18
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 2013-12-14
  • 1970-01-01
相关资源
最近更新 更多