【block】深入理解block

###__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的

参考链接

转载于:https://my.oschina.net/kshopping/blog/688508

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值