GCD的基本使用:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{// dispatch_sync : 同步,不具备开启线程的能力// dispatch_async : 异步,具备开启线程的能力// 并发队列 :多个任务可以同时执行// 串行队列 :一个任务执行完后,再执行下一个任务// 获得全局的并发队列dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);// 将 任务 添加 全局队列 中去 异步 执行dispatch_async(queue, ^{NSLog(@"-----下载图片1---%@", [NSThread currentThread]);});dispatch_async(queue, ^{NSLog(@"-----下载图片2---%@", [NSThread currentThread]);});dispatch_async(queue, ^{NSLog(@"-----下载图片3---%@", [NSThread currentThread]);});dispatch_async(queue, ^{NSLog(@"-----下载图片4---%@", [NSThread currentThread]);});dispatch_async(queue, ^{NSLog(@"-----下载图片5---%@", [NSThread currentThread]);});
}

GCD中队列的使用:

// dispatch_sync : 同步,不具备开启线程的能力
// dispatch_async : 异步,具备开启线程的能力// 并发队列 :多个任务可以同时执行
// 串行队列 :一个任务执行完后,再执行下一个任务// Foundation :  OC
// Core Foundation : C语言
// Foundation和Core Foundation框架的数据类型可以互相转换的//NSString *str = @"123"; // Foundation
//CFStringRef str2 = (__bridge CFStringRef)str; // Core Foundation
//NSString *str3 = (__bridge NSString *)str2;
//    CFArrayRef ---- NSArray
//    CFDictionaryRef ---- NSDictionary
//    CFNumberRef ---- NSNumber// Core Foundation中手动创建的数据类型,都需要手动释放
//    CFArrayRef array = CFArrayCreate(NULL, NULL, 10, NULL);
//    CFRelease(array);
//
//
//    CGPathRef path = CGPathCreateMutable();
//    CGPathRetain(path);
//
//    CGPathRelease(path);
//    CGPathRelease(path);
/**凡是函数名中带有create\copy\new\retain等字眼, 都应该在不需要使用这个数据的时候进行releaseGCD的数据类型在ARC环境下不需要再做releaseCF(Core Foundation)的数据类型在ARC\MRC环境下都需要再做release*/#import "HMViewController.h"@interface HMViewController ()@end@implementation HMViewController- (void)viewDidLoad
{[super viewDidLoad];}- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{[self asyncSerialQueue];
}/***  async -- 并发队列(最常用)*  会不会创建线程:会,一般同时开多条*  任务的执行方式:并发执行*/
- (void)asyncGlobalQueue
{// 获得全局的并发队列dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);// 将 任务 添加 全局队列 中去 异步 执行dispatch_async(queue, ^{NSLog(@"-----下载图片1---%@", [NSThread currentThread]);});dispatch_async(queue, ^{NSLog(@"-----下载图片2---%@", [NSThread currentThread]);});dispatch_async(queue, ^{NSLog(@"-----下载图片3---%@", [NSThread currentThread]);});dispatch_async(queue, ^{NSLog(@"-----下载图片4---%@", [NSThread currentThread]);});dispatch_async(queue, ^{NSLog(@"-----下载图片5---%@", [NSThread currentThread]);});
}/***  async -- 串行队列(有时候用)*  会不会创建线程:会,一般只开1条线程*  任务的执行方式:串行执行(一个任务执行完毕后再执行下一个任务)*/
- (void)asyncSerialQueue
{// 1.创建一个串行队列dispatch_queue_t queue = dispatch_queue_create("cn.heima.queue", NULL);// 2.将任务添加到串行队列中 异步 执行dispatch_async(queue, ^{NSLog(@"-----下载图片1---%@", [NSThread currentThread]);});dispatch_async(queue, ^{NSLog(@"-----下载图片2---%@", [NSThread currentThread]);});dispatch_async(queue, ^{NSLog(@"-----下载图片3---%@", [NSThread currentThread]);});dispatch_async(queue, ^{NSLog(@"-----下载图片4---%@", [NSThread currentThread]);});dispatch_async(queue, ^{NSLog(@"-----下载图片5---%@", [NSThread currentThread]);});// 3.非ARC,需要释放创建的队列
//    dispatch_release(queue);
}/***  async -- 主队列(很常用)*/
- (void)asyncMainQueue
{// 1.主队列(添加到主队列中的任务,都会自动放到主线程中去执行)dispatch_queue_t queue = dispatch_get_main_queue();// 2.添加 任务 到主队列中 异步 执行dispatch_async(queue, ^{NSLog(@"-----下载图片1---%@", [NSThread currentThread]);});dispatch_async(queue, ^{NSLog(@"-----下载图片2---%@", [NSThread currentThread]);});dispatch_async(queue, ^{NSLog(@"-----下载图片3---%@", [NSThread currentThread]);});dispatch_async(queue, ^{NSLog(@"-----下载图片4---%@", [NSThread currentThread]);});dispatch_async(queue, ^{NSLog(@"-----下载图片5---%@", [NSThread currentThread]);});
}/***  sync -- 主队列(不能用---会卡死)*/
- (void)syncMainQueue
{NSLog(@"syncMainQueue----begin--");// 1.主队列(添加到主队列中的任务,都会自动放到主线程中去执行)dispatch_queue_t queue = dispatch_get_main_queue();// 2.添加 任务 到主队列中 异步 执行dispatch_sync(queue, ^{NSLog(@"-----下载图片1---%@", [NSThread currentThread]);});dispatch_sync(queue, ^{NSLog(@"-----下载图片2---%@", [NSThread currentThread]);});dispatch_sync(queue, ^{NSLog(@"-----下载图片3---%@", [NSThread currentThread]);});NSLog(@"syncMainQueue----end--");
}/**-------------------------------------华丽的分割线-----------------------------------------------------**//***  sync -- 并发队列*  会不会创建线程:不会*  任务的执行方式:串行执行(一个任务执行完毕后再执行下一个任务)*  并发队列失去了并发的功能*/
- (void)syncGlobalQueue
{// 获得全局的并发队列dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);// 将 任务 添加到 全局并发队列 中 同步 执行dispatch_sync(queue, ^{NSLog(@"-----下载图片1---%@", [NSThread currentThread]);});dispatch_sync(queue, ^{NSLog(@"-----下载图片2---%@", [NSThread currentThread]);});dispatch_sync(queue, ^{NSLog(@"-----下载图片3---%@", [NSThread currentThread]);});dispatch_sync(queue, ^{NSLog(@"-----下载图片4---%@", [NSThread currentThread]);});dispatch_sync(queue, ^{NSLog(@"-----下载图片5---%@", [NSThread currentThread]);});
}/***  sync -- 串行队列*  会不会创建线程:不会*  任务的执行方式:串行执行(一个任务执行完毕后再执行下一个任务)*/
- (void)syncSerialQueue
{// 创建一个串行队列dispatch_queue_t queue = dispatch_queue_create("cn.heima.queue", NULL);// 将 任务 添加到 串行队列 中 同步 执行dispatch_sync(queue, ^{NSLog(@"-----下载图片1---%@", [NSThread currentThread]);});dispatch_sync(queue, ^{NSLog(@"-----下载图片2---%@", [NSThread currentThread]);});dispatch_sync(queue, ^{NSLog(@"-----下载图片3---%@", [NSThread currentThread]);});dispatch_sync(queue, ^{NSLog(@"-----下载图片4---%@", [NSThread currentThread]);});dispatch_sync(queue, ^{NSLog(@"-----下载图片5---%@", [NSThread currentThread]);});
}@end

转载于:https://www.cnblogs.com/ZMiOS/p/4924219.html

GCD牛逼的中枢调度器相关推荐

  1. 史上最牛逼的音乐播放器—仿网易云音乐(已开源)

    前言:音乐播放器倒见过不少,做到几乎和官方网易云音乐安卓版差不多的,还是头第一回见.aa112901 的这款仿网易云音乐安卓版客户端,很多地方值得我们学习.无论是下载模块,还是换肤模块,还是炫丽的UI ...

  2. 一个牛逼的开源 H5 视频播放器

    [公众号回复 "1024",免费领取程序员赚钱实操经验] 大家好,我是章鱼猫.今天给大家分享的这个开源项目,对于前端开发者来讲非常非常的有用.因为它是一个 H5 的视频播放器. 字 ...

  3. 算力越大越牛逼?地平线与Mobileye等的共识是......

    30 TOPS.100 TOPS.200 TOPS.500 TOPS.1000 TOPS.2000 TOPS......如果只盯着新闻报道看的话,我们会认为,"算力越大越牛逼"已成 ...

  4. 再出个调度器,极小资源单片机值得一用

    再出个调度器,极小资源单片机值得一用  [打印本页] 作者:  smset     时间:  2012-11-26 11:41 标题:  再出个调度器,极小资源单片机值得一用 自认为有如下特点: 1) ...

  5. 放弃 Notepad++,事实证明,还有 5 款更牛逼……

    点击关注公众号,Java干货及时送达 今天跟大家聊一聊,作为文本编辑工具,还有比 Notepad++ 更好的替代工具吗?别说,还真有另外5款(为啥有些粉丝说,要卸载Notepad++ 呢,其实这个No ...

  6. 我终于决定要放弃 okhttp、httpClient,选择了这个牛逼的神仙工具!贼爽

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 在SpringBoot项目直接使用okhttp.httpC ...

  7. 牛逼哄洪的 Java 8 Stream,性能也牛逼么?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 Java8的Stream API可以极大提高Java程序员的生产力 ...

  8. 太牛逼!一款软件几乎可以操作所有的数据库!

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 作者:不剪发的Tony老师 来源:http://suo.im/5OBiUi DBeav ...

  9. 代表Java未来的ZGC深度剖析,牛逼!

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 阿飞的博客 JAVA程序最爽的地方是它的GC机 ...

最新文章

  1. 自动驾驶汽车事故的责任追究
  2. React 2019年路线图发布!Hooks明年一季度上线
  3. Ubuntu 14.04 安装 CUDA 问题及解决
  4. SAP BW数据源增强管理
  5. 安装caffe碰到的坑
  6. python监控端口_python3 端口监控
  7. php语言难点,PHP知识难点TOP3,挑战一下你
  8. 未发现android设备,Brother iPrintScan 应用程序上出现错误信息“未发现支持设备”(Android™ 智能手机)。...
  9. 发明喂饭机器人_人类又懒出新高度,老美发明自动喂饭机器人,“君子”动嘴不动手...
  10. 洛谷P4720 【模板】扩展卢卡斯
  11. cookie 和 session 区别
  12. vscode调试Flutter
  13. 【原创】FPGA开发手记(三) PS/2键盘
  14. Vue Cli 3代理配置
  15. 关于conime.exe
  16. C语言:数组排序(冒泡法排序)
  17. Shell脚本中:#!/bin/bash和#!/bin/sh是什么意思以及区别?
  18. 使用 AppFuse 的七个理由之二
  19. Eclipse Neon EGit Integration gives Exception 401 Authorization Required
  20. 色彩系列教程(3):实际运用

热门文章

  1. java将ascii数组转成unicode字串
  2. 1515 跳 - Wikioi
  3. [置顶] Java Socket实战之一 单线程通信
  4. RUNOOB python练习题 39 数组排序
  5. PostgreSQL 11 1Kw TPCC , 1亿 TPCB 7*24 强压耐久测试
  6. 洛谷P1605:迷宫(DFS)
  7. VMware安装CentOS之二——最小化安装CentOS
  8. spring中用到哪些设计模式
  9. Zabbix监控(十六):分布式监控-Zabbix Proxy
  10. django 性能优化_优化Django管理员