GCD基本用法

ios中多线程有三种,NSTread, NSOperation,GCD
 
这篇就讲讲GCD的基本用法
 
平时比较多使用和看到的是:
 
复制代码
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
 
        //异步操作代码块
 
        dispatch_async(dispatch_get_main_queue(), ^{
 
            //回到主线程操作代码块
 
        });
 
    });
复制代码
比较多的用于更新ui操作
 
比如从 数据库获取数据需要花较长的时间,又不希望卡主线程,就把获取数据库数据操作放在异步操作代码快中,等获取结束,回调主线程,更新ui,在主线程操作代码块中进行操作
 
 
 
下面我们来解析一下这代码块中的每个方法:
 
复制代码
dispatch_async(<#dispatch_queue_t queue#>, <#^(void)block#>)
 
表示异步操作,与之对应的是
 
dispatch_sync(<#dispatch_queue_t queue#>, <#^(void)block#>),同步操作,block中的代码执行完了才能执行后面的操作
 
方法中第一个参数 dispatch_queue_t queue 表示队列,无非是两种:串行和并行,另外可自建串行或并行队列
获取 系统串行队列,也就是主线程串行队列:
 
dispatch_get_main_queue()
 
获取系统并行队列:
 
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
 
其中第一个参数,是队列优先级,有四种:
 
#define DISPATCH_QUEUE_PRIORITY_HIGH 2
 
#define DISPATCH_QUEUE_PRIORITY_DEFAULT 0
 
#define DISPATCH_QUEUE_PRIORITY_LOW (-2)
 
#define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN
 
会根据优先级高低,进行处理
 
自建队列:
 
dispatch_queue_create("com.example.serial", NULL);
 
第一个参数,文档规范说:
A string label to attach to the queue.这个字符串需要唯一性,一般是以上形式呈现
 
第二个参数传NULL或者 DISPATCH_QUEUE_SERIAL 表示串行
传 DISPATCH_QUEUE_CONCURRENT表示并行
 
当执行结束,必须要有 dispatch_release(),将队列释放
复制代码
最近看到一篇文章讲到GCD, 比较深入,还有些没有理解,以上我描述的内容是GCD较为基础的用法,一般程序也就用到这些
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值