1:block 本质上是一个 OC 对象,它内部也有一个 isa指针
2: block是封装了函数调用以及函数调用环境的 OC 对象
3:
4:auto(默认)修饰的局部变量是值传递,static修饰的局部变量是指针传递,全局变量无需捕获,直接访问
5:oc方法默认会传参 方法调用者self和方法名_cmd
6:block有3中类型,可以通过 class 方法或者isa指针查看具体类型,最终都是继承自NSBlock类型
__NSGlobalBlock__ (_NSConcreteGlobalBlock) //数据区
__NSStackBlock__ (_NSConcreteStackBlock)//栈区
__NSMallocBlock__ (_NSConcreteMallocBlock)//堆区
7:block的类型
8:__NSStackBlock__调用copy就会变成__NSMallocBlock__
9:ARC会自动copy 的情况:
10:栈空间的 block 是不会持有外来对象的,堆空间的 block 是会对外来对象进行 retain 操作
11:
12:block一旦访问的是OC对象,就会生成 copy 函数和 dispose 函数
13:block修饰符
14:block 的__forwarding指针
15:__unsafe_unretained:不会产生强引用,不安全,指向的对象销毁时,指针存储的地址值不变,再去访问时报野指针错误,__weak:不会产生强引用,指向的对象销毁时,指针存储的地址值变为 nil.
16:MRC不支持__weak