iOS8 GCD的使用

GCD(Grand Central Dispatch)是一个基于C语言的多线程开发机制,相对于NSTread, NSOperation, 它使用起来非常简单,不需要关心哪个线程在运行,系统管理好了一切!

GCD的核心是调用队列(dispatch queues),这些队列的线程由GCD所在的系统管理。

GCD有三种队列:

主队列(Main Queue)

处理UI相关的方法。

并发队列(Concurrent queues)

有多个线程,操作进来之后它会将这些队列安排在可用的处理器上(一般在其他线程上,在主线程任务不多的时候,也可能把线程分配到主线程上),同时保证先进来的任务优先处理。可以同步或异步,使用dispatch_get_global_queue 来产生并发队列。

串行队列(Serial queues)

只有一个线程(永远不会在主线程上),不论是同步还是异步调用都只会按照先进先出的顺序完成添加到队列的操作。使用

dispatch_queue_create 来产生串行队列。

下面举个简单的例子,我们要执行与UI无关的任务。

- (void)print1To1000
{
    //打印当前i和当前线程
    for (int i = 0; i < 1000; i++) {
        NSLog(@"i = %d, Thread = %@",i, [NSThread currentThread]);
    };
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    //使用并发队列
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    //1 同步调用
    dispatch_sync(queue, ^{
        
        [self print1To1000];
        NSLog(@"print 99");
        [self print1To1000];
    });
    
    
    //2 异步调用
    dispatch_async(queue, ^{
        
        dispatch_async(queue, ^{
            [self print1To1000];
            NSLog(@"print 99 second times");
        });
        
        [self print1To1000];
    });

    
}
从输出结果我们可以看到:

1.//1 只有一条线程,并且是主线程,这是因为前面所说的主线程还很空闲,所以分配到了主线程。也就是说,同步调用并发队列也只有一条线程。
2.//2 必须在 //1执行完毕后才能执行,这是因为//1阻塞了当前线程(也就是主线程),所以必须等//1结束了,才能在当前线程异步调用,当然//2是异步的不会阻塞当前线程;由于//2采用异步调用,在输出窗口看到print 99 second times最后才输出,也就是说输出变得无序了。

最后得到以下结论:

  • 在GDC中一个操作是多线程执行还是单线程执行取决于当前队列类型和执行方法,只有队列类型为并行队列并且使用异步方法执行时才能在多个线程中执行。
  • 串行队列可以按顺序执行,并行队列的异步方法无法确定执行顺序。
  • UI界面的更新最好采用同步方法,其他操作采用异步方法。
更多的关于NSThread, NSOperation, 线程同步,NSLock请参考下面一片很有深度的文章

http://www.cnblogs.com/kenshincui/p/3983982.html#GCD


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值