Block本质

block本质上也是一个OC对象,它内部也有个isa指针 block是封装了函数调用以及函数调用环境的OC对象

Block底层结构示意图

Block变量捕获机制

为了保证block内部能够正常访问外部的变量,block有个变量捕获机制 image.png

对象类型的auto变量

强引用的引用计数加1 :id obj1 = [[NSObject alloc] init]; 等价于 id __strong obj1 = [[NSObject alloc] init];

image.png

auto变量的捕获

image.png

block的类型

block有3种类型,可以通过调用class方法或者isa指针查看具体类型,最终都是继承自NSBlock类型

  1. __NSGlobalBlock__ _NSConcreteGlobalBlock
  2. __NSStackBlock__ _NSConcreteStackBlock
  3. __NSMallocBlock__ _NSConcreteMallocBlock

image.png
image.png

Block的copy操作

image.png