GCD 的理解
来源:互联网 发布:linux 查看启动的服务 编辑:程序博客网 时间:2024/05/16 11:00
对于一些功能,必须得把下载过程放到后台线程进行处理,否则会阻塞UI线程显示。
系统提供的dispatch 方法。为了方便使用GCD,苹果提供了一些方法方便我们将block放在主线程或者后台线程执行.或者延后执行,使用的例子如下所示
// 后台执行
dispatch_async(dispatch_get_global_queue(0, 0), ^{
// something
});
// 主线程执行
dispatch_async(dispatch_get_main_queue(), ^{
// something
});
// 一次性执行
static dispatch_once_t onceToken;
dispatch_once(&onceToken,^{
// code to be executed once
});
// 延迟2秒执行
double delayInseconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInseconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^{
// code to be executed on the main queue after delay
});
另外,GCD 还有一些高级用法,例如然后后天俩个线程并行运行,然后等两个线程都结束后,再汇总执行结果,这个可以用dispatch_group . dispatch_group_async 和 dispatch_group_notify 来实现,
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
// 并行执行的线程1
});
dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
// 并行执行的线程2
});
dispatch_group_notify(group, dispatch_get_global_queue(0, 0), ^{
// 汇总结果
});
修改block 之外的变量
默认情况下,在程序块中访问的外部变量是复制过去的,即写操作不对原变量生效,但是你可以加上__block 来让其写操作生效,
__block int a = 0;
void (^foo)(void) = ^{
a = 1;
}
foo ();
// 这里,a 的值被修改为1
后台运行
使用block 的另一个用处是可以让程序在后台长久的运行,在以前,当应用被按Home,键退出后,应用仅有最多5秒钟的时间做一些保存或清理资源的工作,但是应用可以调用UIApplication 的beginBackgoundTaskWithExpirtionHandler方法,让应用最多有10分钟的时间在后台长久运行,这个时间可以用来做清理本地缓存,发送统计数据等工作。
总结来说,GCD能够极大的方便开发者进行多线程编程,大家应该尽量使用GCD来处理后台线程,和UI线程的交互。
- GCD 的简单理解
- GCD的一点理解
- GCD--我的理解
- GCD的理解
- GCD 的理解
- GCD的深入理解
- GCD的理解
- GCD死锁的理解
- GCD的一点理解
- 针对GCD的理解
- IOS- 对GCD的理解
- iOS gcd的基本理解
- IOS 对GCD 的理解。
- iOS开发:GCD的理解
- GCD的理解与使用
- GCD里面的关键字理解
- GCD死锁的一点点理解
- GCD理解
- 怎么在fireFox里增加插件(CyberArticle)
- WDF USB
- 前端部署规范
- python 套接字简单服务器端
- 阅读项目,写出执行结果4
- GCD 的理解
- 如何编辑MathType公式波浪线
- java 面向对象三大特性(封装,继承,多态)以及抽象、接口的介绍
- 通过IMAP方式迁移U-Mail邮件到Exchange 2013之Exchange 2007 系统搭建!
- Spark性能优化第三季
- [Linux]CentOS下安装和使用tmux
- Java 中日期的几种常见操作 —— 取值、转换、加减、比较
- OC与JS交互
- HTML下使用Radio设置选择样式。