Block 捕获对象类型的变量时的问题?

ARC模式下执行下面这段代码

typedif void(^Block)();
Person *person = [[Person alloc] init];
NSLog(@"Block前person的引用计数%d", _objc_rootRetainCount(person));
Block block = ^{
    perons.name = @"Nature";
    NSLog(@"Block中person的引用计数%d", _objc_rootRetainCount(person));
};
block();
NSLog(@"Block后person的引用计数%d", _objc_rootRetainCount(person));

输出结果如下

Block前person的引用计数为1
Block中person的引用计数为3
Block后person的引用计数为3

我的疑惑是:Block中和Block后这个 对象的引用计数3 怎么来的?

如果block持有对象的强引用,那引用计数不应该是2吗?

阅读 2.8k
1 个回答

我咨询了我同学, 他的意思是, block体内所有强引用都会增加计数器, 正确的做法在内部引用weak变量

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题