GCD为Grand Central Dispatch的缩写.
Grand Central Dispatch (GDC)是Apple 开发的一个多核变成交心的解决方法. 在Mac OSX10.6 雪豹中首次推出, 并在最近引入到了iOS4.0
GCD是一个替代注入NSThread 等技术的很高效和强打的技术/.
GCD完全可以处理注入数据说定和资源泄漏等复杂的一部变成问题
GCD可以完成很多事情, 但是这里仅关注在iOS应用中实现多线程所需的一些基础知识;
在开始之前, 血药i是提供给GCD队列是代码块, 用于在系统或者用户创建的队列上进行调度运行
声明一个队列
dispatch_queue_t myQueue = dispatch_queue_create("com.iphonedevblog.post", NULL);
其中第一个参数是表示队列的, 第二个参数是用来定义队列 的惨书 (目前不支持, 因此传入NULL).
执行一个队列
如下会异步执行传入的代码:
dispatch_async(muQueue,^{[self, doSomething];});
其中, 首先传入之前创建的队列, 然后提供由队列运行的代码块.
声明并执行一个队列
如果不需要保留要运行的队列的引用, 可以通过如下代码实现之前的功能
dispatch_async(dispatch_queue_create("com.iphonedevblog.post",NULL), ^{[self doSomething];});
如果需哟啊暂停一个队列, 可以调用如下代码.暂停一个队列会阻止和该队列相关的所有代码运行.
暂停一个队列
dispatch_suspend(myQueue);
如果暂停一个队列不要忘记恢复. 暂停和恢复的操作和内存管理中的retain和release类似. 调用dispatch_suspend会增早暂停技术, 而dispatch_relsume则会减少. 队列只有在暂停计数变成零的情况下才开始运行.
恢复一个队列
dispatch_resume(myQueue);
从队列中在主线程运行代码
有些操作无法在一部队列运行, 因此必须在主线程(每个应用都有一个)上运行, UI绘图以及任何对NSNotificationCenter的掉哟呵那个必须在主线程进行. 在另一个队列中访问主线程并运行代码如下:
dispatch_sync(dispatch_get_main_queue(),^{[self dismissLoinWindow];});
注意, dispatch_suspend (以及dispatch_resume) 在主线程不起作用,
使用GCD, 可以让你的程序不会失去响应, 多线程不容易使用, 使用了GCD, 会让它变得简单. 你无须专门进行线程管理
dispatch_queue_t t1 = dispatch_queue _create("1", NULL);
dispatch_queue_t t2 = dispatch_queue_create("2", NULL);
dispatch_async(t1, ^{
[self print1];
});
dispatch_async(t2, ^{
[self print2];
});