block

block是一段代码块,这段代码可以在任何时候被执行

定义block的时候block会把局部变量以const的方式复制一份,存放在block所在的内存中,所以block内部不允许修改外部变量值。

如果要修改,需要在block外部,使用__block 修饰局部变量,之后操作局部变量就是在堆区中。

而静态变量和全局变量,无论加不加__block 都会直接引用变量地址,也就意味着可以直接修改变量的值 

而全局变量在block中可以直接修改

1、默认block的生命周期是全局的

2、如果block被strong或者copy修饰,并且里面引用外部变量,block在堆里面
3、如果block被weak或者assgin修饰,并且里面引用外部变量,block在栈里面,会出现坏内存错误

太困了  明天写吧。。。

原文地址:https://www.cnblogs.com/10-19-92/p/5052733.html