设为首页 加入收藏

TOP

iOS多线程开发之GCD(基础篇)(二)
2017-10-11 16:24:45 】 浏览:10109
Tags:iOS 线程 开发 GCD 基础
行处理的任务(耗时操作)代码放在这里
// 获取主线程,处理UI事件 dispatch_async(dispatch_get_main_queue(), ^{ // UI事件 }); }); }

 

    2、创建任务

// 同步执行任务创建方法
dispatch_sync(queue, ^{ NSLog(@"%@",[NSThread currentThread]);    // 这里放任务代码
}); // 异步执行任务创建方法
dispatch_async(queue, ^{ NSLog(@"%@",[NSThread currentThread]);    // 这里放任务代码
});

 

四、队列任务组合 

根据(二)中描述,GCD由队列和任务两部分组成,队列分为串行队列、并行队列、主队列,任务可分为同步和异步任务,这样可将队列与任务组合如下:

 

1、并行队列 & 异步执行

- (void) asyncConcurrentTask { NSLog(@"asyncConcurrentTask---start"); dispatch_queue_t queue= dispatch_queue_create("com.beckwang.queue", DISPATCH_QUEUE_CONCURRENT); dispatch_async(queue, ^{ NSLog(@"Task1------%@",[NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"Task2------%@",[NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"Task3------%@",[NSThread currentThread]); }); NSLog(@"asyncConcurrentTask---end"); }

 打印结果:

2017-07-02 11:13:10.963 Test[6266:2853210] asyncConcurrentTask---start 2017-07-02 11:13:10.963 Test[6266:2853210] asyncConcurrentTask---end 2017-07-02 11:13:10.963 Test[6266:2854044] Task3------<NSThread: 0x60800007cdc0>{number = 5, name = (null)} 2017-07-02 11:13:10.963 Test[6266:2854059] Task2------<NSThread: 0x60800007d1c0>{number = 4, name = (null)} 2017-07-02 11:13:10.963 Test[6266:2854041] Task1------<NSThread: 0x600000074e80>{number = 3, name = (null)}

  结论:

   (1) 开启了新线程

   (2) 任务之间不需要排队,且具有同时被执行的权利

 

2、并行队列 & 同步执行

- (void)syncConcurrentTask { dispatch_queue_t queue = dispatch_queue_create("com.beck.wang.queue", DISPATCH_QUEUE_CONCURRENT); NSLog(@"syncConcurrentTask---start---"); dispatch_sync(queue, ^{ NSLog(@"Task1---%@", [NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"Task2---%@", [NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"Task3---%@", [NSThread currentThread]); }); NSLog(@"syncConcurrentTask---end---"); }

 打印结果:

2017-07-02 11:25:04.725 Test[6385:2940867] syncConcurrentTask---start---
2017-07-02 11:25:04.725 Test[6385:2940867] Task1---<NSThread: 0x608000067540>{number = 1, name = main} 2017-07-02 11:25:04.726 Test[6385:2940867] Task2---<NSThread: 0x608000067540>{number = 1, name = main} 2017-07-02 11:25:04.726 Test[6385:2940867] Task3---<NSThread: 0x608000067540>{number = 1, name = main} 2017-07-02 11:25:04.726 Test[6385:2940867] syncConcurrentTask---end---

  结论:

   (1) 不开启了新线程

   (2) 任务之间需要排队,按照追加顺序执行

 

3、串行队列 & 异步执行

- (void)asyncSerialTask { dispatch_queue_t queue = dispatch_queue_create("com.beckwang.queue", DISPATCH_QUEUE_SERIAL); NSLog(@"asyncSerialTask---start---"); dispatch_async(queue, ^{ NSLog(@"Task1---%@", [NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"Task2---%@", [NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"Task3---%@", [NSThread currentThread]); }); NSLog(@"asyncSerialTask---end---"); }

 打印结果:

2017-07-02 11:36:27.068 Test[6557:3008079
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇在 iOS 中使用 iconfont 下一篇App Extensions篇之Sticker Pack ..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目