当我使用__weak指针引用NSObject时,会显示意外的retainCount.
这是代码:
id obj1 = [[NSObject alloc] init];
id __weak obj2 = obj1;
NSLog(@"obj1: %ld", CFGetRetainCount((__bridge CFTypeRef)obj1)); // line 31
NSLog(@"obj2: %ld", CFGetRetainCount((__bridge CFTypeRef)obj2)); // line 32
NSLog(@"obj1 again: %ld", CFGetRetainCount((__bridge CFTypeRef)obj1)); // line 33
Run Code Online (Sandbox Code Playgroud)
所以〜我的困惑是,obj2的retainCount预计为1,为什么retainCount为2?
我从书中读到:__ weak指针将对象注册到autoreleasepool,因此保留计数+ 1.
但是,obj1和obj2指的是相同的内存地址,在这种情况下,obj1的retainCount也应该变为2.但是,它仍然保持为1.
我知道retainCount是不可靠的,但我很好奇它是如何来的.(我的环境是Xcode 8.3.3,iOS 10.3)
非常感谢任何人都可以向初学者解释这个:)