gpt4 book ai didi

ios - 为什么保留计数在 Debug模式和运行模式下不同?

转载 作者:行者123 更新时间:2023-12-01 17:49:37 25 4
gpt4 key购买 nike

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

    NSMutableArray *a = [NSMutableArray array];
[a addObject:@"abc"];
NSLog(@" 1 Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)a));
__weak NSMutableArray *b = a;
NSLog(@" 2 Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)a));
a = nil;
NSLog(@" 3 Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)b));
[b addObject:@"xys"];
NSLog(@" 4 Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)b));

当我在运行模式下运行应用程序时,应用程序在行 NSLog(@"3 Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)b)); 上崩溃b 是 a 的 weak 引用。并在将 nil 分配给它时反对 get release。但在此之前,如果将前两行的输出显示为下图。这也是正确的。

enter image description here

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

enter image description here

有人知道为什么会这样吗?为什么相同的代码对于不同的模式给出了两个不同的保留值?

最佳答案

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

请勿使用此方法。

之后:

您不太可能从这种方法中获得有用的信息

只是不要使用它。

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

我一直把这理解为“它可能有用,但值(value)可能不是你认为应该的。不要看绝对值就下任何结论,因为我们可能会做我们想做的每一个魔术有了它,这不关你的事。”

关于ios - 为什么保留计数在 Debug模式和运行模式下不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35172268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com