iOS之GCD简单了解使用

来源:互联网 发布:淘宝护肤品假货店铺 编辑:程序博客网 时间:2024/05/18 00:24

Grand Central Dispatch简称GCD

1.任务,即操作分俩种 : 同步执行和异步执行(在GCD中就是一个block)
同步(sync)和异步(async)的主要区别在于会不会阻碍当前线程,知道block结束
如果是同步(sync)操作,会阻碍当前线程并等待block结束,然后才会继续往下执行,如果是异步(async)操作,当先线程会直接往下执行,它不会阻碍当前线程

2.队列:用于存放任务,俩种:串行队列和并行队列
串行队列是根据队列定义FIFO一个一个执行,并行队列则同时进行,注意:如果系统资源不足,任务却很多,并行也不会执行

3.主队列是一个特殊的串行队列,一般用于刷新UI
dispatch_queue_t queue = ispatch_get_main_queue();

4.自己创建队列
自己可以创建 串行队列, 也可以创建 并行队列。看下面的代码(代码已更新),它有两个参数,第一个上面已经说了,第二个才是最重要的。第二个参数用来表示创建的队列是串行的还是并行的,传入 DISPATCH_QUEUE_SERIAL 或 NULL 表示创建串行队列。传入 DISPATCH_QUEUE_CONCURRENT 表示创建并行队。。

//OBJECTIVE-C
//串行队列
dispatch_queue_t queue = dispatch_queue_create(“tk.bourne.testQueue”, NULL);
dispatch_queue_t queue = dispatch_queue_create(“tk.bourne.testQueue”, DISPATCH_QUEUE_SERIAL);
//并行队列
dispatch_queue_t queue = dispatch_queue_create(“tk.bourne.testQueue”, DISPATCH_QUEUE_COURRENT)

5.
下面的是系统的一个并发队列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

6.组
//1.创建队列组
dispatch_group_t group = dispatch_group_create();
//2.创建队列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

//3.多次使用队列组的方法执行任务, 只有异步方法
//3.1.执行3次循环
dispatch_group_async(group, queue, ^{
for (NSInteger i = 0; i < 3; i++) {
NSLog(@”group-01 - %@”, [NSThread currentThread]);
}
});

//3.2.主队列执行8次循环
dispatch_group_async(group, dispatch_get_main_queue(), ^{
for (NSInteger i = 0; i < 8; i++) {
NSLog(@”group-02 - %@”, [NSThread currentThread]);
}
});

//3.3.执行5次循环
dispatch_group_async(group, queue, ^{
for (NSInteger i = 0; i < 5; i++) {
NSLog(@”group-03 - %@”, [NSThread currentThread]);
}
});

//4.都完成后会自动通知
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
NSLog(@”完成 - %@”, [NSThread currentThread]);
});

0 0