OC底层 - block内修改变量

block的捕获问题

block内部修改变量问题

讲一下以上两个问题:

对于捕获问题, 只有局部变量才能被捕获, 全局变量不需要捕获,直接拿着使用, 但是有一点, 当block在栈中时, block是不能捕获对象型变量, 直接拿着使用, 只有在堆中的block才能捕获对象型变量;

对于block内部修改问题, 因为变量捕获有两种, 一种是值捕获, 一种是地址捕获, 对于这两种捕获, 第一种是不允许在block中修改其值, 第二种是不允许在block中修改其地址, 但是可以修改其值;对于对象型变量, 也是属于地址捕获, 不允许修改其地址, 但是可以修改对象的属性等; 如果想要修改block内部捕获的变量的值, 则需要使用__block修饰block内部使用的对应的外部变量, 使用__block修饰的变量, 编译器会将auto变量包装成一个对象; 这时候, block内部捕获的变量指向包装的对象地址,, 包装对象内部的变量直接为外部变量对应的类型, 如果是对象类型, 则该变量指向外部对象的地址, 如果是基础类型, 则直接为对应的类型;

猜你喜欢

转载自blog.csdn.net/Batac_Lee/article/details/110493116