相关疑难解决方法(0)

何时使用-retainCount?

我想知道你-retainCount到目前为止在什么情况下使用过,最后使用它可能发生的问题.

谢谢.

memory-management objective-c retaincount

110
推荐指数
5
解决办法
2万
查看次数

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

我知道ARC和MRC的工作原理。但是在测试以下代码时我感到困惑。我不知道为什么会这样。为什么对于相同的问题,在调试模式和运行模式下保留计数不同?

    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));
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

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

在此处输入图片说明

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

memory-management llvm-gcc ios automatic-ref-counting retain-cycle

1
推荐指数
1
解决办法
767
查看次数