在.m里面这样写
<span style="font-size:18px;">#import "QFViewController.h"
@interface QFViewController ()
@end
@implementation QFViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
// [self GCDDemo1];
// [self GCDDemo2];
[self GCDDemo4];
}
#pragma mark - GCD方法
#pragma mark - 主(线程)队列,保证操作在主线程执行
- (void)GCDDemo4
{
//每一个应用程序都只有一个主线程
//为什么需要在主线程工作呢?(在实际应用中,主线程是不会中断的,是一个不断循环调用的过程)
//在iOS开发中,所有的UI的更新工作,都必须在主线程完成。
dispatch_queue_t q = dispatch_get_main_queue();
dispatch_sync(q, ^{
NSLog(@"aaaaaaa");
});
dispatch_async(q, ^{
NSLog(@"bbbbbbb");
});
}
#pragma mark - 全局队列
//苹果为了方便多线程的设计,提供一个全局队列,供所有的APP共同使用
- (void)GCDDemo3
{
//系统自带全局并行队列与自己创建并行队列区别
//系统自带全局并行队列不需要创建,直接get就能用
//两个队列的执行效果相同
//全局队列没有名称,调试时,无法确定准确队列
//系统自带全局并行队列:dispatch_get_global_queue(队列的优先级, 0)
dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
for (int i = 0; i < 10; i++)
{
dispatch_async(q, ^{
NSLog(@"%@ %d",[NSThread currentThread],i);
});
}
for (int i = 0; i < 10; i ++)
{
dispatch_sync(q, ^{
NSLog(@"%@ %d",[NSThread currentThread],i);
});
}
}
#pragma mark - 串行(一个接一个执行)队列
- (void)GCDDemo1
{
//将操作放在队列里面
//在C语言函数中,定义类型,绝大多数的结尾是_t或者是ref
//多线程中的函数都是用disqatch开头
//自己创建队列:dispatch_queue_create(队列名, 队列类型 串行 并行)
// DISPATCH_QUEUE_SERIAL 串行队列
dispatch_queue_t q = dispatch_queue_create("string", DISPATCH_QUEUE_SERIAL);
for (int i = 0; i < 10; i ++)
{
dispatch_async(q, ^{
NSLog(@"%@",[NSThread currentThread]);
});
}
}
#pragma mark - 并行(并排跑,类似于赛跑,谁先到,谁先打印)
- (void)GCDDemo2
{
//自己创建队列:dispatch_queue_create(队列名, 队列类型 串行 并行)
// DISPATCH_QUEUE_CONCURRENT 并行队列
dispatch_queue_t q = dispatch_queue_create("string", DISPATCH_QUEUE_CONCURRENT);
for (int i = 0; i < 10; i++)
{
dispatch_async(q, ^{
NSLog(@"%@ %d",[NSThread currentThread],i);
});
}
}
@end</span>