1. __block
如果想要在block内部修改外部变量,外部变量就应该用__block来修饰
对象类型的会有copy,dispose两个方法
2. __Block_byref
有指针__forwarding,会指向自身
当block的外部使用变量时,会根据__foewarding找到自身,然后取值
当栈区的block被copy到堆区的时候,栈区的变量的__forwarding指向堆区的__Block_byref
(p.__forwarding->p)
3. 总结
- __block 可以用于在block中修改变量的值
- __block 不能修改全局变量,静态变量(static)
编译器会将__block变量包装成一个对象(youisa指针,指向0)
__block被拷贝到堆区的时候,会有copy,和dispose方法(都算是对象类型的变量)
__block 实际上就是把修饰的内容,用结构体重新包装了一次,生成一个格外的结构体