block根据内存分配区域的不同,分为__NSGlobalBlock__,__NSStackBlock__,__NSMallocBlock__三类:
输出结果为
没有捕获auto变量的block会被编译器分配到数据区,有截获auto变量的block会被分配到栈, 对Global型的block进行copy,编译器什么也不做;对栈类型的block进行copy操作的话,block会被分配到堆;对堆类型的block进行copy的话,引用计数会加1。
block类型的父类
控制台的输出为
__NSGlobalBlock__,__NSStackBlock__,__NSMallocBlock__三种类型的block继承自共同的父类NSBlock。