1.没有参数的block实现原理
1.1定义block变量
1.2_main_block_impl_0结构体实现。 1.2.1函数实现(_main_block_func_0)赋值给 impl.FuncPtr.1.2.2block所占字节(__main_block_desc_0)赋值给DESC.
1.3block函数实现__main_block_func_0.
1.4 __block_impl结构体实现。 2.block调用 block->FuncPtr(block)2.有参数的block实现原理
struct __test_block_impl_0 {
struct __block_impl impl;
struct __test_block_desc_0* Desc;
int age;(局部变量)
int *height;(静态局部变量)(全局变量不捕获到block中)
__test_block_impl_0(void *fp, struct __test_block_desc_0 *desc, int _age, int *_height, int flags=0) : age(_age), height(_height) {
impl.isa = &_NSConcreteStackBlock;
impl.Flags = flags;
impl.FuncPtr = fp;
Desc = desc;
}
};
复制代码
self 在block中也是局部变量,发送消息时默认是传self,和sel(cmd)。