1 /** 2 GCD两个核心概念:任何和队列 3 4 任务:执行什么操作 5 队列:用来存放任务 6 7 使用就2个步骤 8 1.定制任务 9 2.将任务添加到队列中 10 11 任务的取出队列原则:FIFO原则: 先进先出,后进后出12 13 */14 15 #import "HMViewController.h"16 17 @interface HMViewController ()18 19 @end20 21 @implementation HMViewController22 23 - (void)viewDidLoad24 {25 [super viewDidLoad];26 // Do any additional setup after loading the view, typically from a nib.27 }28 29 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event30 {31 //能不能开启新的进程 有两个用来执行任务的函数32 // dispatch_sync : 同步的方式,就是在当前线程执行,不具备开启线程的能力33 // dispatch_async : 异步的方式,走一条跟当前线程不一样的线程,具备开启线程的能力34 35 36 //任务的执行方式37 // 并发队列 :多个任务可以同时执行38 // 串行队列 :一个任务执行完后,再执行下一个任务39 40 // 获得全局的并发队列41 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);42 43 // DISPATCH_QUEUE_PRIORITY_DEFAULT 队列被调度的优先级,这里是默认,一般都这样写44 45 //5条并发执行的队列46 47 // 将 任务 添加 全局队列 中去 异步 执行48 //有两个参数:queue-队列 block:任务49 dispatch_async(queue, ^{ //开启异步线程,只要将要执行的代码放到block中就行了50 //这里是下载图片,只要将下载图片的代码放里面就行了51 NSLog(@"-----下载图片1---%@", [NSThread currentThread]);52 //它是在子线程中执行的 自动在子线程中执行53 });54 dispatch_async(queue, ^{55 NSLog(@"-----下载图片2---%@", [NSThread currentThread]);56 });57 dispatch_async(queue, ^{58 NSLog(@"-----下载图片3---%@", [NSThread currentThread]);59 });60 dispatch_async(queue, ^{61 NSLog(@"-----下载图片4---%@", [NSThread currentThread]);62 });63 dispatch_async(queue, ^{64 NSLog(@"-----下载图片5---%@", [NSThread currentThread]);65 });66 }67 68 @end