小编Ran*_*ngo的帖子

iOS10 __weak指针使retainCount +1

当我使用__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)

非常感谢任何人都可以向初学者解释这个:)

objective-c retaincount

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

标签 统计

objective-c ×1

retaincount ×1