美文网首页
十三、Block之(五)Block的__block的细节

十三、Block之(五)Block的__block的细节

作者: yqc5521 | 来源:发表于2019-04-20 10:57 被阅读0次

一、__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的原理相似。

相关文章

网友评论

      本文标题:十三、Block之(五)Block的__block的细节

      本文链接:https://www.haomeiwen.com/subject/luekgqtx.html