Block局部变量快照功能
来源:互联网 发布:部落冲突蓝胖子数据 编辑:程序博客网 时间:2024/06/09 07:58
结论:
block 的快照功能 (快照-保存之前瞬间变量的值,之后程序其他地方改变变量的值,block内该变量的值不改变)- 对block申明时外部局部变量起作用
- -(void)test:(NSInteger )i 对于传递参数也具有快照功能
- 对其外部成员变量不起作用
测试代码:
- 对block申明时外部局部变量起作用
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. _ioQueue = dispatch_queue_create("com.sohu-inc.ImageCache", DISPATCH_QUEUE_SERIAL); // a = @"0"; for (int i = 0 ; i < 5; i ++) { [self test:i]; }}-(void)test:(NSInteger )i{ NSString *a = @"0"; a = [NSString stringWithFormat:@"%ld",i]; NSLog(@"===test:%@",a); dispatch_async(self.ioQueue, ^{ NSLog(@"block before test,%@",a); sleep(1); NSLog(@"block after test,%@",a); });}
测试结果:
2016-05-10 16:46:59.682 ARCTest[3312:206422] ===test:02016-05-10 16:46:59.683 ARCTest[3312:206422] ===test:12016-05-10 16:46:59.683 ARCTest[3312:206458] block before test,02016-05-10 16:46:59.683 ARCTest[3312:206422] ===test:22016-05-10 16:46:59.683 ARCTest[3312:206422] ===test:32016-05-10 16:46:59.683 ARCTest[3312:206422] ===test:42016-05-10 16:47:00.687 ARCTest[3312:206458] block after test,02016-05-10 16:47:00.687 ARCTest[3312:206458] block before test,12016-05-10 16:47:01.691 ARCTest[3312:206458] block after test,12016-05-10 16:47:01.692 ARCTest[3312:206458] block before test,22016-05-10 16:47:02.693 ARCTest[3312:206458] block after test,22016-05-10 16:47:02.694 ARCTest[3312:206458] block before test,32016-05-10 16:47:03.699 ARCTest[3312:206458] block after test,32016-05-10 16:47:03.699 ARCTest[3312:206458] block before test,42016-05-10 16:47:04.705 ARCTest[3312:206458] block after test,4
- -(void)test:(NSInteger )i 对于传递参数也具有快照功能
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. _ioQueue = dispatch_queue_create("com.sohu-inc.ImageCache", DISPATCH_QUEUE_SERIAL); // a = @"0"; for (int i = 0 ; i < 20; i ++) { [self test:i]; }}-(void)test:(NSInteger )i{ NSString *a = @"0"; a = [NSString stringWithFormat:@"%ld",i]; NSLog(@"===test:%@",a); dispatch_async(self.ioQueue, ^{ NSLog(@"block before test,%ld",i); sleep(1); NSLog(@"block after test,%ld",i); });}
部分执行结果:
2016-05-10 13:12:40.691 ARCTest[1875:104044] ===test:02016-05-10 13:12:40.691 ARCTest[1875:104044] ===test:12016-05-10 13:12:40.691 ARCTest[1875:104084] block before test,02016-05-10 13:12:40.691 ARCTest[1875:104044] ===test:22016-05-10 13:12:40.692 ARCTest[1875:104044] ===test:32016-05-10 13:12:40.692 ARCTest[1875:104044] ===test:42016-05-10 13:12:40.692 ARCTest[1875:104044] ===test:52016-05-10 13:12:41.692 ARCTest[1875:104084] block after test,02016-05-10 13:12:41.692 ARCTest[1875:104084] block before test,12016-05-10 13:12:42.698 ARCTest[1875:104084] block after test,12016-05-10 13:12:42.698 ARCTest[1875:104084] block before test,22016-05-10 13:12:43.700 ARCTest[1875:104084] block after test,22016-05-10 13:12:43.701 ARCTest[1875:104084] block before test,32016-05-10 13:12:44.706 ARCTest[1875:104084] block after test,32016-05-10 13:12:44.706 ARCTest[1875:104084] block before test,42016-05-10 13:12:45.712 ARCTest[1875:104084] block after test,42016-05-10 13:12:45.712 ARCTest[1875:104084] block before test,52016-05-10 13:12:46.714 ARCTest[1875:104084] block after test,5
- 对其外部成员变量不起作用
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. _ioQueue = dispatch_queue_create("com.sohu-inc.ImageCache", DISPATCH_QUEUE_SERIAL); a = @"0"; for (int i = 0 ; i < 5; i ++) { [self test:i]; }}-(void)test:(NSInteger )i{ a = [NSString stringWithFormat:@"%ld",i]; NSLog(@"===test:%@",a); dispatch_async(self.ioQueue, ^{ NSLog(@"block before test,%@",a); sleep(1); NSLog(@"block after test,%@",a); });}
测试结果:
2016-05-10 16:49:56.233 ARCTest[3329:209776] ===test:02016-05-10 16:49:56.234 ARCTest[3329:209776] ===test:12016-05-10 16:49:56.234 ARCTest[3329:209848] block before test,12016-05-10 16:49:56.234 ARCTest[3329:209776] ===test:22016-05-10 16:49:56.234 ARCTest[3329:209776] ===test:32016-05-10 16:49:56.234 ARCTest[3329:209776] ===test:42016-05-10 16:49:57.239 ARCTest[3329:209848] block after test,42016-05-10 16:49:57.239 ARCTest[3329:209848] block before test,42016-05-10 16:49:58.244 ARCTest[3329:209848] block after test,42016-05-10 16:49:58.244 ARCTest[3329:209848] block before test,42016-05-10 16:49:59.248 ARCTest[3329:209848] block after test,42016-05-10 16:49:59.248 ARCTest[3329:209848] block before test,42016-05-10 16:50:00.250 ARCTest[3329:209848] block after test,42016-05-10 16:50:00.250 ARCTest[3329:209848] block before test,42016-05-10 16:50:01.253 ARCTest[3329:209848] block after test,4
0 0
- Block局部变量快照功能
- block引用局部变量
- iOS中block 静态全局局部变量block变量
- 局部变量与代码块(block)
- __block,访问block外局部变量
- smarty block 功能实现 局部缓存
- Block用法---局部变量和全局变量在Block中的使用
- 【close】任务局部变量相关功能
- Block笔记(3):截获局部变量及__block修饰符
- 091.Block And Var 块与局部变量
- 092.Block And Var 块中修改局部变量
- 092.Block And Var 块中修改局部变量
- 091.Block And Var 块与局部变量
- Block与数组排序,局部变量,字面量
- Block的操作,使用typedef,局部变量,全局变量
- iOS开发关于block和局部变量和全局变量
- IOS中 Block用法进阶二 局部变量和全局变量在Block中的使用
- ios中Block内访问函数局部变量时变量的改变情况
- mysql新建从
- java中利用calendar进行天数的增加后如何传递给date的解决方法
- $.ajax()方法详解
- Maven学习12之跳过测试时surefire 2.19.1版本错误
- Spring声明式事务管理与配置介绍
- Block局部变量快照功能
- TCMalloc 安装和使用
- struts2(包含配置)(团队开发,多配置文件)
- Kafka 设计与原理详解(二)
- 【bzoj2121】字符串游戏 dp
- 七、JAVA三大特性
- 杭电acm2004成绩转换
- 如何使用chrome自带的Javascript调试工具
- Android开发工具类之DownloadManagerPro