20141009(Block总结)

https://code.google.com/p/nevel-mercury/wiki/GetFamiliarWithBlock#block和变量之间的关系

1.Block 外部变量使用

    在block体中可以访问到block以外的变量,分两种情况考虑:
(1)在block体中访问外部基本类型变量
此时该基本类型会被 block 进行一次 copy 后以一个临时变量存放在 block 体中。 毫无疑问,既然是copy一份,那在block体内修改该基本变量对外部的基本变量是没有影响的;同理block体外修改此变量对体内的变量也是没有影响的。事实上,编译器不允许在block体直接修改外部变量。
(2)在block体中访问外部指针变量 或 objective-c中所有对象
此时该指针变量会被block进行retain操作后也以一个临时变量存放起来。因为会 retain 操作,很容易会形成引用环而不能释放,尤其block回调时。

    为了摆脱外部变量魔咒,可以用 __block 修饰外部变量(注意是两个下划线),当外部变量被 __block 修饰后,block体不再会对外部变量进行 retain 或 copy 操作了。这样就如同一般的语句体,保证内外变量的一致了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值