九、Block之(一)Block内部结构及调用本质

一、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的内存布局

你可能感兴趣的:(九、Block之(一)Block内部结构及调用本质)