Block值捕获和__block总结

  1. block的值捕获
    block可以捕获调用处的局部变量,在block内部使用
    因为block对变量进行了值copy,将其从栈区拷贝到堆区,当然对于本来就在堆区的对象只是进行了引用计数加1,然后作为参数传递到block内部进行使用,苹果做了限制,无法修改其指向的内存地址,因此无法修改其值

  2. __block
    __block其实是新建了一个struct结构体,结构体内指向了局部变量值,将结构体作为参数传递给block,这样就可以通过该结构体访问和修改值了