复习知识点:GCD多线程

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     // 第三个参数:block
38 //    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 @end
10
11 @implementation ViewController
12
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         // 返回主线程 刷新UI
32         dispatch_async(dispatch_get_main_queue(), ^{
33             // 传值
34             weakSelf.imgView.image = [UIImage imageWithData:self.imageData];
35         });
36     });
37
38 }
39
40 @end
时间: 2024-10-13 03:32:05

复习知识点:GCD多线程的相关文章

Java核心知识点学习----多线程中的阻塞队列,ArrayBlockingQueue介绍

1.什么是阻塞队列? 所谓队列,遵循的是先进先出原则(FIFO),阻塞队列,即是数据共享时,A在写数据时,B想读同一数据,那么就将发生阻塞了. 看一下线程的四种状态,首先是新创建一个线程,然后,通过start方法启动线程--->线程变为可运行可执行状态,然后通过数据产生共享,线程产生互斥---->线程状态变为阻塞状态---->阻塞状态想打开的话可以调用notify方法. 这里Java5中提供了封装好的类,可以直接调用然后构造阻塞状态,以保证数据的原子性. 2.如何实现? 主要是实现Blo

Java核心知识点学习----多线程 倒计时记数器CountDownLatch和数据交换的Exchanger

本文将要介绍的内容都是Java5中的新特性,一个是倒计时记数器---CountDownLatch,另一个是用于线程间数据交换的Exchanger. 一.CountDownLatch 1.什么是CountDownLatch? 倒计时计数器,调用CountDownLatch对象的CountDown()方法就将计数器减一,当计数到达0时,则所有等待者或者全部等待者开始执行. 2.如何用? new CountDownLatch(1); 直接new,其构造函数必须传一个int类型的参数,参数的意思是: c

iOS开发中的gcd多线程tips

iOS开发中的gcd多线程tips 我们经常用到的: dispatch_async(dispatch_get_global_queue(0, 0), ^{ // 处理耗时操作的代码块 //通知主线程刷新 dispatch_async(dispatch_get_main_queue(), ^{ //回调或者说是通知主线程刷新 }); }); 其中main_queue是系统默认的串行队列,global_queue是系统默认的并行队列. 什么是串行队列(Serial)? 创建任意个数的串行队列,每个队

计算机网络笔试题 详细分析复习知识点

1.在无盘工作站向服务器申请IP地址时,使用的是(     )协议. A.ARP B.RARP C.ICMP D.IGMP 解析: ARP工作机制 : A的ARP表中没有B的IP MAC 对应条目则发送ARP广播包,请求B的MAC地址 在全网"呼叫" 当B听到有机器"嚎叫"就返回一个数据包告诉你"我的MAC是X"然后双方就可以通信了,在A"嚎叫"的时候,A需要把IP和MAC地址广播出去用于B返回信息, 之后AB更新自己的ARP

iOS开发之GCD 多线程 1.串行队列 2.并行队列 3.分组 4.信号量 详细讲解

GCD多线程下,实现线程同步的方式有如下几种: 1.串行队列 2.并行队列 3.分组 4.信号量 实例: 去网上获取一张图片并展示在视图上. 实现这个需求,可以拆分成两个任务,一个是去网上获取图片,一个是展示在视图上. 这两个任务是有关联的,所以需要同步处理. 下面看这几种方式如何实现. 一. 1.串行队列 1.1[GCD相关:] (1)GCD下的dispatch_queue队列都是FIFO队列,都会按照提交到队列的顺序执行. 只是根据队列的性质,分为<1>串行队列:用户队列.主线程队列 &l

jQuery复习知识点(2、创建节点 3、插入节点)

创建节点的语法: $(html); 插入节点的语法: 话不多说直接上代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>jQuery复习知识点(2.创建节点 3.插入节点)</title> <script type="text/javascript"src="../j

Object-C关于GCD多线程的使用

```objc1 使用Crearte函数创建的并发队列和全局并发队列的主要区别: 1)全局并发队列在整个应用程序中本身是默认存在的并且对应有高优先级.默认优先级.低优先级和后台优先级一共四个并发队列,我们只是选择其中的一个直接拿来用.而Create函数是实打实的从头开始去创建一个队列. 2)在iOS6.0之前,在GCD中凡是使用了带Create和retain的函数在最后都需要做一次release操作.而主队列和全局并发队列不需要我们手动release.当然了,在iOS6.0之后GCD已经被纳入到

GCD多线程死锁总结

// //  ViewController.m //  多线程 // // #import "ViewController.h" @interface ViewController () @end @implementation ViewController /* >1 队列和线程的区别: 队列:是管理线程的,相当于线程池,能管理线程什么时候执行. 队列分为串行队列和并行队列 串行队列:队列中的线程按顺序执行(不会同时执行) 并行队列:队列中的线程会并发执行,可能会有一个疑问,队

GCD - 多线程

什么是 GCD GCD 是 libdispatch 的市场名称,而 libdispatch 作为 Apple 的一个库,为并发代码在多核硬件(跑 iOS 或 OS X )上执行提供有力支持.它具有以下优点: 1.GCD 能通过推迟昂贵计算任务,并在后台运行它们改善应用的响应性能. 2.GCD 提供一个易于使用的并发模型而不仅仅只是锁和线程,以帮助我们避开并发陷阱. 3.GCD 具有在常见模式(例如单例),用更高性能的原语优化你的代码. GCD 术语 Serial vs. Concurrent 串