与函数最大的区别:
函数是静态创建 动态运行. 不能在函数内定义函数.
block 是动态创建动态运行. 可以在函数内定义block 也可以在block内部定义block.
1.外部变量不加__block, 一边拷贝一份到block区. ,名字是一样的.值且不能改变.
2. 外部变量加了__block
2,1 block内部访问了这个变量
一旦执行到了block, 相当于创建了一个变量(剪切到了一个公共区).且之前的外部变量被替换(地址改变, 值没有改变).
2.2 block内部没有访问这个变量
对外部的变量没有影响, 跟没有加__block是一个效果.
注意: block 对变量内存的改变跟这个block是否调用没有关系, 只创建依然起作用.
block可以当函数与方法的返回值.
但是: 如果当函数返回值的时候 必须用typedef 定义这个block的别名
|
|