GCD的基本概念
GCD是苹果在OS X Snow Leopard跟iOS4后引入的一个技术,利用GCD,我们可以将多线程代码编写的很优雅。在使用GCD前,我们可以简章回顾下传统的多线程技术。
1 int main() { 2 id o = [[MyObject alloc] init]; 3 [o execBlock]; 4 return 0; }
中间会有些基本的方法被调用,用图形来表式的话就是下面这样:
多线程在应用中可能会有各种问题,常见如下:数据同步,死锁这两个可以算是常见的。那为什么在应用中还要用多线程呢,这是因为多线程可以使我们的应用有更好的响应。
Dispatch Queue:是一个队列用来存储一系列将要执行的任务。有两种类型,一种是Serial Dispatch Queue,另一种是Concurrent Dispatch Queue。顾名思议,一种就是一次只能执行一个任务,另一种就是在第一个任务还没执行完的时候另一个任务就可以开始的。用图来表示就是:
那我们怎么来获得这些Dispatch Queues呢,通过dispatch_queue_create是一种方式,当然我们也可用系统自带的如:dispatch_get_main_queue跟dispatch_get_global_queue。
我们获得Queue后,可以通过dispatch_set_target_queue来设置它的优先等级。还有,如果你想在一段时间后再执行,那可以用dispatch_after来完成你想要的功能。
另外你可能想在所有的Queue都执行完后再作一些清理动作,那这个时候我们可以使用Dispatch Group。
在说GCD的时候,不得不提的另一个元素就是Block了,Block在其它平台中,有叫匿名函数的,也有叫Lambda表达式的,总之它们是一个意思。
两个的结合等下篇再说,洗洗睡了。
作者:
xwang
出处:
http://www.cnblogs.com/xwang/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。