博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
复习知识点:GCD多线程
阅读量:4474 次
发布时间:2019-06-08

本文共 3681 字,大约阅读时间需要 12 分钟。

GCD的基础

1 #pragma mark - 使用GCD 创建一个 串行 队列 2     // 第一种:系统提供的创建串行队列的方法 3     // 在真正的开发中如果需要创建串行队列,比较习惯用这种 4 //    dispatch_queue_t queue = dispatch_get_main_queue();  5  6 #pragma mark - 使用GCD去创建 并行 队列 7     // 第一种:系统的 8     // 参数1:表示优先级(有四个,没有明显区别) 9     // 参数2:系统保留字10 //    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);11 12 #pragma mark - 使用GCD并行队列 创建子线程13     // 参数1:队列名14     // 参数2:block//    dispatch_async(queue, ^{15 //        NSLog(@"main1 = %@", [NSThread mainThread]);16 //        NSLog(@"current1 = %@", [NSThread currentThread]);17 //    });18 //    dispatch_async(queue, ^{19 //        NSLog(@"main2 = %@", [NSThread mainThread]);20 //        NSLog(@"current2 = %@", [NSThread currentThread]);21 //    });22 //    dispatch_async(queue, ^{23 //        NSLog(@"main3 = %@", [NSThread mainThread]);24 //        NSLog(@"current3 = %@", [NSThread currentThread]);25 //    });26 //    。。。。创建N个27 28 #pragma mark - 几秒之后去做每一件事29 //    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{30 //        NSLog(@"3.0秒的时候");31 //    });32 33 #pragma mark - 重复像一个队列中添加多个任务34 //    dispatch_queue_t queue = dispatch_queue_create(0, DISPATCH_QUEUE_CONCURRENT);35     // 第一个参数:添加的数量36     // 第二个参数:队列37     // 第三个参数:block38 //    dispatch_apply(100, queue, ^(size_t index) {39 //        NSLog(@"%ld", index);40 //    });41 42 #pragma mark - 分组43 //    // 创建一个分组44 //    dispatch_group_t group = dispatch_group_create();45 //    // 创建一个队列46 //    dispatch_queue_t queue = dispatch_queue_create(0, DISPATCH_QUEUE_CONCURRENT);47 //    // 创建任务1:48 //    dispatch_group_async(group, queue, ^{49 //        NSLog(@"i am 1");50 //    });51 //    // 创建任务2:52 //    dispatch_group_async(group, queue, ^{53 //        NSLog(@"i am 2");54 //    });55 //    。。。。创建N个56 57 //    // 用于监听素有的任务执行的情况的 {所以此功能代码必须放在所有任务之后}58 //    dispatch_group_notify(group, queue, ^{59 //        NSLog(@"i am notify");60 //    });61 62 #pragma mark - 并发中的串行 (披着羊皮的狼)63 //    // 创建的队列串行64 //    // DISPATCH_QUEUE_SERIAL 顺序执行65 //    // DISPATCH_QUEUE_CONCURRENT 无序执行66 //    dispatch_queue_t queue = dispatch_queue_create(0, DISPATCH_QUEUE_CONCURRENT);67 //    dispatch_async(queue, ^{68 //        NSLog(@"test 1");69 //    });70 //    dispatch_async(queue, ^{71 //        NSLog(@"test 2");72 //    });73 //    。。。。创建N个

代码展示:

 

1 #import "ViewController.h" 2  3 @interface ViewController () 4 /// 创建一个imageView 5 @property (nonatomic,strong) UIImageView *imgView; 6 /// 创建一个data用于接收数据 7 @property (nonatomic,strong) NSData *imageData; 8  9 @end10 11 @implementation ViewController12 13 - (void)viewDidLoad {14     [super viewDidLoad];15     // Do any additional setup after loading the view, typically from a nib.16     // 把imageView添加到视图上17     self.imgView = [[UIImageView alloc] initWithFrame:[UIScreen mainScreen].bounds];18     self.imgView.backgroundColor = [UIColor cyanColor];19     [self.view addSubview:self.imgView];20     21     [self dataHandle];22 }23 #pragma mark - 解析数据24 - (void)dataHandle {25     __weak typeof(self) weakSelf = self;26     // 创建子线程 在子线程中请求数据27     dispatch_async(dispatch_queue_create(0, DISPATCH_QUEUE_CONCURRENT), ^{28         NSURL *url = [NSURL URLWithString:@"http://pic.58pic.com/58pic/13/11/15/83b58PICXf4_1024.jpg"];29         // 接收数据30         weakSelf.imageData = [NSData dataWithContentsOfURL:url];31         // 返回主线程 刷新UI32         dispatch_async(dispatch_get_main_queue(), ^{33             // 传值34             weakSelf.imgView.image = [UIImage imageWithData:self.imageData];35         });36     });37     38 }39 40 @end

 

转载于:https://www.cnblogs.com/crazygeek/p/5538139.html

你可能感兴趣的文章
ROS探索总结(三)——ROS新手教程
查看>>
Linux GCC常用命令
查看>>
冒泡排序
查看>>
工作心得1
查看>>
6-Ubuntu—截屏与截取选定区域
查看>>
树链剖分
查看>>
代码演示 Linq 延迟执行(Deferred Execution) 带来的问题
查看>>
内网安全体系建设工作思路
查看>>
第16月第25天 tableView设置UITableViewStyleGrouped顶部有空余高度
查看>>
RPC服务的发布订阅实现(基于Zookeeper服务) 转载
查看>>
读取配置文件包含properties和xml文件
查看>>
解决Mac安装tesserocr报错问题 Failed building wheel for
查看>>
adplus 抓取dump
查看>>
Github 开源:使用 .NET WinForm 开发所见即所得的 IDE 开发环境(Sheng.Winform.IDE)【2.源代码简要说明】...
查看>>
[学习笔记]关于CUDA与OPENCL
查看>>
kafka之consumer参数auto.offset.reset 0.10+
查看>>
Strategic Game HDU - 1054(最小顶点覆盖)
查看>>
C#删除程序自身【总结】
查看>>
单例和多线程
查看>>
解析好的静态页面.shtml浏览器无法解析.需要apache解析后再返回给浏览器
查看>>