前言
上面提到__forwarding指针指结构体自己,当使用变量的时候,通过结构体找到__forwarding指针,在通过__forwarding指针找到相应的变量 为什么要这么设计呢?
这样设计的目的是为了方便内存管理
_forwarding指针
代码
__block int a = 30;
void(^block1)(void) = ^ {
NSLog(@"%d",a);
};
Clang
// __Block_byref 结构体
struct __Block_byref_a_0 {
void *__isa;
__Block_byref_a_0 *__forwarding;
int __flags;
int __size;
int a;
};
// 初始化 讲(__Block_byref_a_0 *)&a 赋给__forwarding指针变量
// __forwarding 指向自己
__Block_byref_a_0 a = {
(void*)0,(__Block_byref_a_0 *)&a, 0, sizeof(__Block_byref_a_0), 30};
匿名函数
static void __main_block_func_0(