浅谈iOS多线程中的GCD

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

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

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

    GCD的三种队列任务
并发

    1.主线程队列
框架

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

    主线程队列不须要咱们建立,经过dispatch_get_main_queue()方法得到spa

 dispatch_queue_t  queue = dispatch_get_main_queue();线程

     dispatch_async(queue, ^{调试

            [self taskThread1];orm

        });

    或者

    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,务必在主线程中进行)

相关文章
相关标签/搜索