GDC的理解

来源:互联网 发布:好听的男性网络名字 编辑:程序博客网 时间:2024/04/27 22:10

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];

});


0 0
原创粉丝点击