如需转载,请注明出处,尊重他人劳动,谢谢
GCD:Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法。是用C实现的,用起来很方便,而且很强大。
下面就来介绍GCD把。
1: 同步 和 异步 方法
1.1 同步 dispatch_sync(<#dispatch_queue_t queue#>, <#^(void)block#>)
第一个参数:传入一个队列,会吧block 任务加入到队列
第二个block: 是需要执行的任务代码
同步方法 没有创建线程的能力;
1.2 异步 dispatch_async(<#dispatch_queue_t queue#>, <#^(void)block#>)
参数跟同步方法一样。但是异步方法有创建新线程的能力!!
2: 队列
2.1 串行队列
第一个参数: 是个C 的 参数,就一个C类型的字符串
第二个参数:创建什么类型的队列。DISPATCH_QUEUE_SERIAL 为串行
dispatch_queue_t quue = dispatch_queue_create("com.joyfun.yg", DISPATCH_QUEUE_SERIAL);
2.2 并发队列
参数跟上面一样。DISPATCH_QUEUE_CONCURRENT 为并发队列
dispatch_queue_t quue = dispatch_queue_create("com.joyfun.yg", DISPATCH_QUEUE_CONCURRENT);
也可用下面的方法
第一个第二个参数 给定 0,0 就行了,不要管它
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
好了。2中方法2中队列,那么有4种组合方式
3. 代码。(不喜欢废话,代码先撸为敬)
3.1 异步+ 并发
看一下输出结果吧:
看到了吧。number 是变动的,2、3、4, 说明创建了线程哦,线程的创建个数,由系统决定,看 a.b.c 是说明它是并发的哦,不是按照循序执行的。
3.2 异步+ 串行
运行起来:
注意到 number = 2 ,创建了新线程了,再看a.b.c,是按照添加的循序执行的,说明是串行的哦。
3.3 同步+并发
number =1 ,name=main, 是主线程啦。说明同步方法没有能力创建线程,a、b、c是按照循序执行的,说明 并发 只能在异步方法里面有效。
3.4 同步+ 串行
呀买碟。结果跟上面一样。记住啦。
4. GCD延时
之前咱们调用延时方法老是用这个
[self performSelector:<#(nonnull SEL)#> withObject:<#(nullable id)#> afterDelay:<#(NSTimeInterval)#>]
是不是很low,来点高大上的GCD.
第一个参数: 从什么时候开始,默认的现在开始,不要管它
第二个参数: 延时多久,给它个时间,秒
第三个参数:在哪个队列中执行。默认主队列,可以根据你的需要修改
第四个: 任务,写你需要做的事情
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(<#delayInSeconds#> * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
<#code to be executed after a specified delay#>
});
效果跟以前的performSelector 一样吧。用起来
5. GCD Timer
以前用定时器喜欢用 NSTimer 去创建一个 定时器,那么现在可以用 GCD 定时器,精准度很高。还有个很大的优点 : GCD定时器不受RunLoop约束,比NSTimer更加准时。
就这么强大,简单。
6. GCD 一次性函数
应用场景: 单例。 表示只创建一次,不多说,很简单
就写到这儿,有时间再去跟新其它GCD几个函数.谢谢大家的阅读,共同提高能力!欢迎老司机指点