浅谈iOS多线程中的GCD

本文详细介绍了iOS开发中GCD队列调度的基础概念、三大队列类型(主线程队列、私有队列、全局队列)及其在并发编程中的应用案例,包括如何正确使用GCD的API来提高代码效率。

    iOS中所支持的多线程编程方法有三种:NSThread、NSOperation&NSoperationQueue、GCD,其中GCD是苹果官方所推荐使用的。

    GCD全称Grand Central Dispatch(队列调度),是一套底层API,提供了一种新的方法来进行并发程序编写。从基本功能上讲,GCD类似NSOperationQueue,都是允许程序将任务切分为多个单一任务,然后提交至工程队列来并发地(串行)执行。

    GCD是C语言的实现,比NSoperationQueue更底层、更高效,并且它不是Cocoa框架的组成部分,并发任务会想NSoperationQueue那样基于系统负载来合适地并发进行,串行队列同一时间只执行单一任务,GCD的API很大程度上基于block。

    GCD的三种队列任务

    1.主线程队列

    主线程队列, 内部执行任务是串行的同步操作。

    主线程队列不需要我们创建,通过dispatch_get_main_queue()方法获得

 dispatch_queue_t  queue = dispatch_get_main_queue();

     dispatch_async(queue, ^{

            [self taskThread1];

        });

    或者

    dispatch_async(dispatch_get_main_queue(), ^{

            [self taskThread2];

        });


    2.创建私有队列  用户队列/串行队列

      使用C接口,创建一个私有队列,队列名是一个C字符串,没有特别的要求,官方建议用倒装的标示符来表示(多用于调试)

    私有队列内部也是串行操作

     dispatch_queue_t queue = dispatch_queue_create("com.qianfeng", NULL);

        dispatch_async(queue, ^{

                [self taskThread2];

            });

            // 我们自己创建的队列,非ARC下,我们需要自己销毁

            //dispatch_release(queue);


        3.全局队列

      全局队列是并行队列,不需要手动创建,可以通过dispatch_get_global_queue()方法获得

    // 第一个参数是选取按个全局队列,一般采用DEFAULT,默认优先级队列

    // 第二个参数是保留标志,目前的版本没有任何用处(不代表以后版本),直接设置为0就可以了

    dispatch_queue_t queue =  dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    

    在全局队列里增加占用时间很长的block时,例如数据下载,文件操作,数据库操作等。需要在主队列中刷新UI(任何情况下刷新UI,务必在主线程中进行)

   

转载于:https://my.oschina.net/u/2425915/blog/498492

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值