OC-Block的本质
1.block的本质 block其实就是封装了函数调用以及环境变量调用的对象。 2.block的定义 return_type (^blockName)(parameters) 3.block的本质结构 新建工程,在main.m中添加如下的代码: int age = 10; void (^blockame)(void) = ^{ NSLog(@"logBlock = %d", age); }; blockame(); 用命令行将main.m转成c++的语言,如下: xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m 生成的main.cpp打开,查看如下: 从上图可以看出,c++把block转成了__main_block_impl_0 这种结构体。 C++命名block是有格式的,格式如下:__XXX类名_block定义所在的方法名_block_impl_0 ,与block相关的结构体命名大致都类似 。 __main_block_impl_0 结构体定义如下: 其中, __main_block_impl_0 这个结构体有三个属性:__block_impl结构体类型的 impl、__main_block_desc_0结构类型的desc,还有外部获取到的变量 age。从定义中可知:把fp赋值给了impl的FuncPtr