[iOS开发]推翻错误结论——“Block可以捕获它的声明所在相同作用域的状态。”
2013-12-27 18:41
351 查看
最近看block,觉着好神奇。尤其是block可以捕获自动变量值特性,简直是大杀器啊。那么捕获的究竟是何时的自动变量呢?各大技术博客与技术书籍统一口径:Block可以捕获它的声明所在相同作用域的状态。真的是这样吗?且跟我来试一试。
代码:- (void)viewDidLoad{ int val=0; void (^blk)(NSInteger); //声明block类型变量 val = 1; //在定义前重新赋值。 blk=^(NSInteger a){ NSLog(@"截获的val:%d",val); return; }; val = 2; //定义后,调用前重新赋值。 blk(val);
}声明前val=0;声明后定义前val=1;定义后调用前val=2;打印出来的结果是什么呢??
2013-12-27 18:30:14.182 Test[2594:70b] 截获的val:1
所以得出结论:Block可以捕获它的定义所在相同作用域的状态。而不是所谓的声明所在相同域的状态。查阅苹果官方文档。https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Blocks/Articles/bxOverview.html#//apple_ref/doc/uid/TP40007502-CH3-SW3
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/09/8d1e2cd9308e4fcb538ee1c57dcdf51f.png)
Can capture state from the lexical scope within which it is defined
(Block)可以捕获它的定义所在相同作用域的状态。沉冤昭雪……
为什么网上会统一口径说捕获的是声明所在相同作用域呢?顺藤摸瓜发现网上有人将这份关于block的苹果官方文档翻译成了中文…翻译的还挺好的,就是这一句翻译错了……错将定义翻译成了声明(或者是不小心,或者是声明和定义概念没有搞清楚)一传十十传百,关于block的诸多资料都是由这份错误翻译的文档演变而来的…悲伤的是到现在还没有人来为其正名…百度关于Block捕获的是何时的作用域清一色的全是错误结论……
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/09/cbe9706dd67455da4c124d72ddc1777b.png)
坑爹呢这是!!
正确结论:Block捕获的应该是它的定义所在相同作用域的状态。而不是所谓的声明所在相同域的状态。
大家对于网上的资料不要盲信,一要自己去试,二要警惕翻译错误挖的坑。
代码:- (void)viewDidLoad{ int val=0; void (^blk)(NSInteger); //声明block类型变量 val = 1; //在定义前重新赋值。 blk=^(NSInteger a){ NSLog(@"截获的val:%d",val); return; }; val = 2; //定义后,调用前重新赋值。 blk(val);
}声明前val=0;声明后定义前val=1;定义后调用前val=2;打印出来的结果是什么呢??
2013-12-27 18:30:14.182 Test[2594:70b] 截获的val:1
所以得出结论:Block可以捕获它的定义所在相同作用域的状态。而不是所谓的声明所在相同域的状态。查阅苹果官方文档。https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Blocks/Articles/bxOverview.html#//apple_ref/doc/uid/TP40007502-CH3-SW3
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/09/8d1e2cd9308e4fcb538ee1c57dcdf51f.png)
Can capture state from the lexical scope within which it is defined
(Block)可以捕获它的定义所在相同作用域的状态。沉冤昭雪……
为什么网上会统一口径说捕获的是声明所在相同作用域呢?顺藤摸瓜发现网上有人将这份关于block的苹果官方文档翻译成了中文…翻译的还挺好的,就是这一句翻译错了……错将定义翻译成了声明(或者是不小心,或者是声明和定义概念没有搞清楚)一传十十传百,关于block的诸多资料都是由这份错误翻译的文档演变而来的…悲伤的是到现在还没有人来为其正名…百度关于Block捕获的是何时的作用域清一色的全是错误结论……
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/09/cbe9706dd67455da4c124d72ddc1777b.png)
坑爹呢这是!!
正确结论:Block捕获的应该是它的定义所在相同作用域的状态。而不是所谓的声明所在相同域的状态。
大家对于网上的资料不要盲信,一要自己去试,二要警惕翻译错误挖的坑。
相关文章推荐
- IOS简单的实现手机震动的提示
- iOS with ffmpeg
- IOS 判断IOS系统版本
- IOS7状态栏字颜色设置
- iOS中读取照片库
- 用c#开发Android和iOS
- (转)iOS7和iOS6适配,和保留之前的坐标编码习惯,不用刻意加减
- iOS企业开发In House ipa发布流程
- IOS设计模式第九篇之备忘录模式
- IOS设计模式第七篇之观察者设计模式
- iOS页面跳转
- 常遇见的警告、错误以及相关解决方法
- IOS对字符串操作大全
- IOS 可变参数
- 【iOS设计模式】---- 门面模式,装饰器模式
- IOS设计模式第八篇之键值观察模式
- IOS设计模式第九篇之备忘录模式
- IOS开发 tableview中cell的用法
- IOS7 新特性说明
- IOS---APNS,推送通知