美文网首页iOS高级进阶
Block的引用情况

Block的引用情况

作者: 南城同學 | 来源:发表于2019-08-29 10:20 被阅读0次
  • 当block内部访问了对象类型的auto变量时:
        MYBlock block;
        {
            // 默认是auto修饰
            MYPerson *person = [[MYPerson alloc] init];
            person.age = 10;
            block = ^{
                NSLog(@"---------%d", person.age);
            };
        }
       NSLog(@"------");
  • 如果block是在栈上的(访问了auto变量的block),将不会对auto变量产生强引用 ;

  • 如果block是在堆上(严格来说是栈上的block进行了copy操作,才变成了堆上的):
    1.会调用block内部的copy函数;
    2.copy函数内部会调用_Block_object_assign函数;
    3._Block_object_assign函数会根据auto变量的修饰符(__strong__weak__unsafe_unretained)做出相应的操作,形成强引用(retain)或者弱引用。

  • 如果block从堆上移除:
    1.会调用block内部的dispose函数;
    2.dispose函数内部会调用_Block_object_dispose函数;
    3._Block_object_dispose函数会自动释放引用的auto变量(release)。

相关文章

网友评论

    本文标题:Block的引用情况

    本文链接:https://www.haomeiwen.com/subject/nobbectx.html