block内局部变量的修改
1.基本数据类型:
1)不使用__block修饰
代码:

运行结果:

结论:对于基本数据类型,程序编译时block会将“捕捉”到的变量复制一份,然后对复制的这个变量进行修改。因为内存地址不相同,所以block作用域内的变量跟作用域外的变量值的改变互不影响.
2)使用__block修饰
代码:

运行结果:

结论:
当用__block来修饰变量的时候,在block内部调用变量与作用域外的变量指向相同内存地址,所有获取到的值是最新的变量值。并且block作用域内部可以直接对__block修饰的值进行修改(不适用__block修饰时,block作用域内直接写a =a+2会直接报错)
2.对象指针

结论:一个对象指针,在block作用域内复制的是对象的这个指针,而不是对象,复制之后的指针仍然指向原来的对象,所以对block内部model.title进行操作是对原对象属性的修改。
网友评论