dispatch
来源:互联网 发布:末代沙皇公主知乎 编辑:程序博客网 时间:2024/04/19 06:39
Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法。该方法在Mac OS X 10.6雪豹中首次推出,并随后被引入到了iOS4.0中。GCD是一个替代诸如NSThread, NSOperationQueue, NSInvocationOperation等技术的很高效和强大的技术,它看起来象就其它语言的闭包(Closure)一样(在Swift确实成为了闭包),但苹果把它叫做blocks。
我们一般使用如下的dispatch方法:
解释:
第一句是异步执行,第二句是延迟异步执行,第三句是先后台运行,再更新UI
dispatch_get_main_queue 代表应用主线程执行,可以在内部更新UI(并不会阻塞主线程)
dispatch_get_global_queue 代表在系统后台运行,不一定和UI在同一线程,不能更新UI,适用于网络处理与Core Data等的处理。
修改block之外的变量
访问变量
默认情况下,在程序块中访问的外部变量是赋值(assign)过去的,即写操作不对原变量生效。但是你可以加上 __block来让其写操作生效,示例代码如下:
__block int a = 0;
void (^foo)(void) = ^{
a = 1;
}
foo();
// 这里,a的值被修改为1
访问对象
如果是在代码块内部访问self等对象,建议用弱指针引用后再在代码块(闭包)中使用
OC 中
__weak __typeof(&*self) ws = self;
Swift中,在闭包内声明
[unowned self]
另外
GCD还有一些高级用法,例如让后台2个线程并行执行,然后等2个线程都结束后,再汇总执行结果。这个可以用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), ^{
// 并行执行的线程一
});
dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{
// 并行执行的线程二
});
dispatch_group_notify(group, dispatch_get_global_queue(0,0), ^{
// 汇总结果
});
- dispatch
- dispatch
- dispatch源(dispatch source)
- double dispatch
- Dispatch Action
- Double Dispatch
- Dispatch Sources
- Dispatch Queues
- Dispatch Queues
- dispatch onintercept
- as3 dispatch
- Dispatch Sources
- dispatch对象
- dispatch队列
- dispatch源
- dispatch同步
- Dispatch Sources
- Dispatch Queues++++++++++
- QT 下调用python自定义模块
- INSERT 报 不是Group by 表达式
- vue全家桶
- CSS——浮动的清除
- 有关二叉树的一些问题集合(一)
- dispatch
- 1061判断题(逻辑题)
- 【flask web开发】centos下下载git客户端并使用
- django基础入门(5)-视图
- Tomcat原理详解及请求过程
- 87. Scramble String
- 命名空间,输入输出流,重载,缺省参数,引用和指针区别
- Learning Python Part II 之 迭代和推导式
- LinkedHashMap和TreeMap排序实现