一、__block的细节
1.__block的修饰的变量地址是_Block_byref变量名_0结构体的地址,还是_Block_byref变量名_0结构体内部变量名的地址?
1.1、地址打印结果:直接打印结果和通过->访问_Block_byref变量名_0的变量获取的质地,两者并不相同,说明__block的修饰的变量地址并不是_Block_byref变量名_0结构体的地址,而是_Block_byref变量名_0结构体内部变量名的地址。

1.2、通过结构体地址计算同样可以得出结论。

2.为什么__block的修饰的变量地址不是_Block_byref变量名_0结构体内部变量名的地址,而是_Block_byref变量名_0结构体的地址?
因为如果开发则不研究__block的底层实现,并不会知道_Block_byref变量名_0结构体的存在,苹果为了屏蔽__block的内部实现,会让开发者看着int修饰的age,跟直接访问的age,就是同一个变量,与KVO的原理相似。
网友评论