block的结构体如下
Block是带有自动变量的匿名函数;
有三种类型的Block:
_NSConcreteGlobalBlock
_NSConcreteStackBlock
_NSConcreteMallocBlock
Block截获外面的自动变量:
全局变量不会被截获;
没有被__block修饰的int,block体中对这个变量的引用是值拷贝,在block中是不能被修改的;
通过__block修饰的int,block体中对这个变量的引用是指针拷贝,它会生成一个结构体,复制这个变量的指针引用,从而达到可以修改变量的作用;
Block发生copy时机:
block作为方法或函数的返回值时,编译器会自动完成copy操作。
当block赋值给通过strong或copy修饰的id或block类型的成员变量时。
当 block 作为参数被传入方法名带有 usingBlock 的 Cocoa Framework 方法或 GCD 的 API 时。
网友评论