为什么在调试模式和运行模式下保持计数不同?

时间:2016-02-03 08:48:45

标签: ios memory-management automatic-ref-counting llvm-gcc retain-cycle

我知道ARC和MRC是如何工作的。但在测试下面的代码时我很困惑。我不知道为什么会这样。为什么在调试模式和运行模式下,对于同一个问题,保留计数是不同的?

NSLog(@" 3 Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)b));

当我在运行模式下运行应用时,应用程序在weak行崩溃,我理解为b是nil的引用。并在向其分配{{1}}时对象获取释放。但在此之前,如果显示前两行的输出作为下图。这也是正确的。

enter image description here

但是当应用程序处于调试模式时(意味着我们设置了断点和调试),应用程序没有崩溃,并且每行都显示保留计数2。如下图所示。

enter image description here

有人知道为什么会这样吗?为什么相同的代码为不同的模式提供两个不同的保留值?

1 个答案:

答案 0 :(得分:4)

retainCount方法documentation中的第一句话说:

请勿使用此方法。

后来:

您不太可能从此方法中获取有用的信息

不要使用它。

正如trojanfoe在评论中指出的那样,在给定代码中使用的CFGetRetainCount有一个类似的(可能稍微小一点)免责声明发布到它。

我总是把它理解为“它可能有用,但价值可能不是你认为的那样。不要通过查看绝对值来得出任何结论,因为我们可能会做我们想做的每一个魔法有了它,这不是你的事业“。