Block的深入了解

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 时。

你可能感兴趣的:(Block的深入了解)