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