一、Block内部数据结构
Block结构组成Block结构图分析
1.调用分析
调用分析1简化后的代码1
调用分析2
调用分析3
调用分析4
2.关于block调用中 block->FunPrt()的理解
block表面上来看是没有FuncPrt的变量,按理说是不可能被调用的,因为它被强转为 __block_impl ,为什么可以强转呢?因为block的类型为 __main_block_impl0 的结构体,它的第一个成员变量类型为__block_impl的结构体类型,因此 __block_impl 的内存地址就是__main_block_impl0结构体的地址,因此可以通过指针找到这个成员变量。
还可以理解为:__main_block_impl0的内存布局原来是这样的
原来__main_block_impl0的内存布局
但通过内存布局的角度,可以转换为下面这样的
本质上的__main_block_impl0的内存布局
网友评论