GCD学习笔记(五):dispatch_after
2015-06-10 12:48
381 查看
http://itjoy.org/?p=558
有时候我们需要延迟执行某个动作,比如三秒后打印一句话,可以调用[self performSelector:nil withObject:nil afterDelay:3],来实现任务延迟,也可以使用dispatch_after来完成这个动作:
Objective-C
需要注意的是,使用dispatch_after实现延迟执行某动作,时间并不是很精确,实际上是过多久将Block追加到main Queue中,而不是执行该动作,如果此时main queue中的任务很多,没有执行完毕,那么新添加的这个动作就要继续推迟。Objective-C
如果对时间的精确度没有高要求,只是为了推迟执行,那么使用dispatch_after还是很不错的。
dispatch_time_t类型的时间我们可以通过dispatch_time来创建,也可以通过dispatch_walltime来创建。前者创建的时间多以第一个参数为参照物,之后过多久执行任务。后者多用于创建绝对时间,如某年某月某日某时某分执行某任务,比如闹钟的设置。
有时候我们需要延迟执行某个动作,比如三秒后打印一句话,可以调用[self performSelector:nil withObject:nil afterDelay:3],来实现任务延迟,也可以使用dispatch_after来完成这个动作:
Objective-C
1234567891011121314 | //// int64_t delayInSeconds = 10.0; /* *@parameter 1,时间参照,从此刻开始计时 *@parameter 2,延时多久,此处为秒级,还有纳秒等。10ull * NSEC_PER_MSEC */ dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ NSLog(@"hello world!"); }); ///[self performSelector:nil withObject:nil afterDelay:10]; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | //////////////////////////////////////////////////////////// NSLog(@"hello world"); dispatch_async(dispatch_get_main_queue(), ^{ sleep(10); NSLog(@"sleep 10s"); }); NSLog(@"hello objective-c"); dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, 5ull * NSEC_PER_SEC); dispatch_after(delayTime,dispatch_get_main_queue(),^(void){ NSLog(@"after 5s , execute!"); }); NSLog(@"hello kevin jin"); // 2013-08-12 14:02:53.220 GCD[3273:11303] hello world // 2013-08-12 14:02:53.221 GCD[3273:11303] hello objective-c // 2013-08-12 14:02:53.222 GCD[3273:11303] hello kevin jin // 2013-08-12 14:03:03.229 GCD[3273:11303] sleep 10s // 2013-08-12 14:03:03.230 GCD[3273:11303] after 5s , execute! |
dispatch_time_t类型的时间我们可以通过dispatch_time来创建,也可以通过dispatch_walltime来创建。前者创建的时间多以第一个参数为参照物,之后过多久执行任务。后者多用于创建绝对时间,如某年某月某日某时某分执行某任务,比如闹钟的设置。
相关文章推荐
- 系统变质
- 201506101245_《javascript不借助第三方交换两个变量值》
- repo总结
- 【WebDriver】启动chrome浏览器提示:您使用的是不受支持的命令行标记:--extensions-on-chrome-urls
- GCD学习笔记(四):dispatch_set_target_queue
- cocos2d-x 3.6连连看工程结构
- (三)ajax请求不同源之websocket跨域
- 第十三周 课后实践:项目三——立体类族共有的抽象类
- GCD学习笔记(三):Main Dispatch Queue/Global Dispatch Queue
- 2015年大一下第13周项目2-用文件保存的学生名单
- 自己动手写编译器之Tiny语言语法分析器的实现
- mysql enterprise backup入门使用
- GRE作文怎样用问句开头?
- 第十四周程序阅读——例十三
- GCD学习笔记(二):dispatch_queue_create
- 第14周 项目三-OOP版电子词典
- iOS下的几种加密方式
- 解析命令行选项参数函数getopt()
- shell排序
- LRUCache 详解