1.没有参数的block实现原理
1.1定义block变量
1.2.2block所占字节(__main_block_desc_0)赋值给DESC.
1.3block函数实现__main_block_func_0.
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)。