#import "ViewController.h"
@interface ViewController ()
@end
/**
*
1.GCD底层也是用线程来实现的
2.GCD有两种执行任务的方式
01.同步dispatch_sync(避免在主线程中使用同步执行主线程任务容易死锁)
02.异步dispatch_async
3.GCD的参数:queue:队列 Block
:任务
4.同步异步的区别:
同步:在当前线程执行,顺序执行
异步:在另一条线程执行,可以开辟一个线程,利用系统空闲时间去执行
5.死锁在主队列(GCD)里面
在主线程(ui线程)同步执行任务;主队列与主线程是同一个东西;
6.主队列
同步执行某个任务的时候,会等待前面的任务执行完毕之后才去执行主队列里面的任务;但主队列是在主线程里面执行任务的;《他们两个现在
在同一个线程里面》线程是顺序执行任务的,这时候主线程会等主队列里面的任务执行完毕
,再去继续执行 ,主队列会等待主线程执行完毕才回去执行主队列里面的任务。
7.串行队列分两种
01.主队列 dispatch_get_main_queue()主队列是GCD自带的一种特殊的串行队列,放在主队列中的任务,都会放在主线程执行
02.创建一个队列
*/
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//通过GCD获得主队列
//所有队列接收队列对象都要dispatch_queue_t
// dispatch_queue_t mainQueue = dispatch_get_main_queue();
//同步执行任务
// dispatch_sync(mainQueue, ^{
// NSLog(@"dispatch_sync");
// });
//异步执行任务
// NSLog(@"主线程执行到这里,发现一个异步执行代码,会执行异步执行的代码,但是,不会等待里面的任务执行完毕之后再继续执行主线程任务");
// dispatch_async(mainQueue, ^{
// NSLog(@"异步执行任务");
// });
// dispatch_queue_t mainQueues = dispatch_get_main_queue();
//
// dispatch_async(mainQueues, ^{
// NSLog(@"sssss");
// });
//
//串行队列
有两种方式 1.主队列 2.创建队列
串行队列是按照顺序执行的
//自己创建队列的方式<串行队列>
// dispatch_queue_t huluWaQueue = dispatch_queue_create ("湖经济可能更客观", NULL);
// dispatch_sync(huluWaQueue, ^{
// NSLog(@"11111");
// });
// dispatch_sync(huluWaQueue, ^{
// NSLog(@"222222");
// });
// dispatch_sync(huluWaQueue, ^{
// NSLog(@"333333");
// });
// dispatch_sync(huluWaQueue, ^{
// NSLog(@"4444444");
// });
//并发队列
可以指定队列任务的优先级 使用全局并发队列
//#define DISPATCH_QUEUE_PRIORITY_HIGH 2
//#define DISPATCH_QUEUE_PRIORITY_DEFAULT 0
//#define DISPATCH_QUEUE_PRIORITY_LOW (-2)
//#define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN
//GCD默认已经提供了全局的并发队列,供整个应用使用,不需要手动创建
//long identifier指定优先级
dispatch_queue_t firstQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_queue_t secondQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);
dispatch_queue_t thirdQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(firstQueue, ^{
NSLog(@"11111");
});
dispatch_async(secondQueue, ^{
NSLog(@"22222");
});
dispatch_async(thirdQueue, ^{
NSLog(@"33333");
});
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
版权声明:本文为博主原创文章,未经博主允许不得转载。