GCD牛逼的中枢调度器
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牛逼的中枢调度器相关推荐
- 史上最牛逼的音乐播放器—仿网易云音乐(已开源)
前言:音乐播放器倒见过不少,做到几乎和官方网易云音乐安卓版差不多的,还是头第一回见.aa112901 的这款仿网易云音乐安卓版客户端,很多地方值得我们学习.无论是下载模块,还是换肤模块,还是炫丽的UI ...
- 一个牛逼的开源 H5 视频播放器
[公众号回复 "1024",免费领取程序员赚钱实操经验] 大家好,我是章鱼猫.今天给大家分享的这个开源项目,对于前端开发者来讲非常非常的有用.因为它是一个 H5 的视频播放器. 字 ...
- 算力越大越牛逼?地平线与Mobileye等的共识是......
30 TOPS.100 TOPS.200 TOPS.500 TOPS.1000 TOPS.2000 TOPS......如果只盯着新闻报道看的话,我们会认为,"算力越大越牛逼"已成 ...
- 再出个调度器,极小资源单片机值得一用
再出个调度器,极小资源单片机值得一用 [打印本页] 作者: smset 时间: 2012-11-26 11:41 标题: 再出个调度器,极小资源单片机值得一用 自认为有如下特点: 1) ...
- 放弃 Notepad++,事实证明,还有 5 款更牛逼……
点击关注公众号,Java干货及时送达 今天跟大家聊一聊,作为文本编辑工具,还有比 Notepad++ 更好的替代工具吗?别说,还真有另外5款(为啥有些粉丝说,要卸载Notepad++ 呢,其实这个No ...
- 我终于决定要放弃 okhttp、httpClient,选择了这个牛逼的神仙工具!贼爽
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 在SpringBoot项目直接使用okhttp.httpC ...
- 牛逼哄洪的 Java 8 Stream,性能也牛逼么?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 Java8的Stream API可以极大提高Java程序员的生产力 ...
- 太牛逼!一款软件几乎可以操作所有的数据库!
点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 作者:不剪发的Tony老师 来源:http://suo.im/5OBiUi DBeav ...
- 代表Java未来的ZGC深度剖析,牛逼!
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 阿飞的博客 JAVA程序最爽的地方是它的GC机 ...
最新文章
- 自动驾驶汽车事故的责任追究
- React 2019年路线图发布!Hooks明年一季度上线
- Ubuntu 14.04 安装 CUDA 问题及解决
- SAP BW数据源增强管理
- 安装caffe碰到的坑
- python监控端口_python3 端口监控
- php语言难点,PHP知识难点TOP3,挑战一下你
- 未发现android设备,Brother iPrintScan 应用程序上出现错误信息“未发现支持设备”(Android™ 智能手机)。...
- 发明喂饭机器人_人类又懒出新高度,老美发明自动喂饭机器人,“君子”动嘴不动手...
- 洛谷P4720 【模板】扩展卢卡斯
- cookie 和 session 区别
- vscode调试Flutter
- 【原创】FPGA开发手记(三) PS/2键盘
- Vue Cli 3代理配置
- 关于conime.exe
- C语言:数组排序(冒泡法排序)
- Shell脚本中:#!/bin/bash和#!/bin/sh是什么意思以及区别?
- 使用 AppFuse 的七个理由之二
- Eclipse Neon EGit Integration gives Exception 401 Authorization Required
- 色彩系列教程(3):实际运用