###__block究竟是怎么的情况
看懂了,还是要收藏,免得忘记了,又找不到!
###了解Block
Block 是c的扩展,在OC中没有GC,所以自己来进行内存管理,错误的内存管理会导致crash.
Block 是携带了函数,同时也有函数执行环境
###你不知道的
Block在内存中的位置分为三种类型NSGlobalBlock,NSStackBlock, NSMallocBlock
NSGlobalBlock:类似函数,位于text段;
NSStackBlock:位于栈内存,函数返回后Block将无效;
NSMallocBlock:位于堆内存。
###外部变量的存取
1.局部自动变量,在Block中只读。Block定义时copy变量的值,在Block中作为常量使用,所以即使变量的值在Block外改变,也不影响他在Block中的值。
2.全局变量或static静态变量在内存中的地址是固定的,Block在读取该变量值的时候是直接从其所在内存读出,获取到的是最新值,而不是在定义时copy的常量。
3.被__block修饰的变量称作Block变量。 基本类型的Block变量等效于全局变量、或静态变量。
###注:BLOCK被另一个BLOCK使用
此时,另一个BLOCK被COPY到堆上时,被使用的BLOCK也会被COPY。但作为参数的BLOCK是不会发生COPY的