03-GCD

2016-10-18  本文已影响34人  chenHanMao

1.1 GCD的核心思想 : 将任务添加到队列

1.2 GCD的使用步骤 :

        创建队列 :
        dispatch_queue_t queue = dispatch_get_global_queue(0, 0);

        创建任务 :
        void(^task)() = ^{
            NSLog(@"hello %@",[NSThread currentThread]);
        };

        将任务添加到队列 :
        dispatch_async(queue, task);

1.3 简写

    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        NSLog(@"GCDDemo3 %@",[NSThread currentThread]);
    });

1.4 GCD的线程间的通信 (需要完全掌握)

    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        
        NSLog(@"假装在努力下载... %@",[NSThread currentThread]);
        
        // 下载结束之后,通知主线程刷新UI
        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"假装在刷新UI... %@",[NSThread currentThread]);
        });
    });

2.队列和任务

// 参数1 : 队列的标示符
// 参数2 : 队列的属性.决定了队列是串行的还是并行的.
dispatch_queue_t queue = dispatch_queue_create("zj", DISPATCH_QUEUE_SERIAL);
// 参数1 : 队列的标示符
// 参数2 : 队列的属性.决定了队列是串行的还是并行的.
dispatch_queue_t queue = dispatch_queue_create("zj", DISPATCH_QUEUE_CONCURRENT);
dispatch_sync(queue, ^{
         NSLog(@"%d %@",i,[NSThread currentThread]);
     });
 dispatch_async(queue, ^{
            NSLog(@"%d %@",i,[NSThread currentThread]);
        });

GCD队列和任务组合总结

3.主队列

  • 专门用来在主线程上调度任务的队列.
dispatch_queue_t queue = dispatch_get_main_queue();

4.全局队列

程序一启动会默认创建一个全局队列,它的本质是并行队列;苹果为了方便程序员快速的是任务异步执行而准备的

 // 全局队列,跟主队列一样不需要创建
    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);

*  参数1 : 队列的优先级 / 队列的服务器质量;传入0,是为了适配iOS7.0和8.0及以后,也是设置成默认的
*  参数2 : 留着以后使用
上一篇 下一篇

猜你喜欢

热点阅读