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