设为首页 加入收藏

TOP

iOS多线程开发之GCD(基础篇)(三)
2017-10-11 16:24:45 】 浏览:10105
Tags:iOS 线程 开发 GCD 基础
] asyncSerialTask---start--- 2017-07-02 11:36:27.068 Test[6557:3008079] asyncSerialTask---end--- 2017-07-02 11:36:27.068 Test[6557:3008342] Task1---<NSThread: 0x600000071e00>{number = 3, name = (null)} 2017-07-02 11:36:27.069 Test[6557:3008342] Task2---<NSThread: 0x600000071e00>{number = 3, name = (null)} 2017-07-02 11:36:27.069 Test[6557:3008342] Task3---<NSThread: 0x600000071e00>{number = 3, name = (null)}

 结论:

   (1) 开启了新线程

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

 

4、串行队列 & 同步执行

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

 打印结果:

2017-07-02 13:17:48.948 Test[7238:3192943] syncSerialTask---start---
2017-07-02 13:17:48.948 Test[7238:3192943] Task1---<NSThread: 0x600000076640>{number = 1, name = main} 2017-07-02 13:17:48.949 Test[7238:3192943] Task2---<NSThread: 0x600000076640>{number = 1, name = main} 2017-07-02 13:17:48.949 Test[7238:3192943] Task3---<NSThread: 0x600000076640>{number = 1, name = main} 2017-07-02 13:17:48.949 Test[7238:3192943] syncSerialTask---end---

结论:

   (1) 不开启了新线程

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

 

5、主队列 & 异步执行

- (void)asyncMainTask { dispatch_queue_t queue = dispatch_get_main_queue(); NSLog(@"asyncMainTask---start---"); dispatch_async(queue, ^{ NSLog(@"Task1---%@", [NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"Task2---%@", [NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"Task3---%@", [NSThread currentThread]); }); NSLog(@"asyncMainTask---end---"); }

打印结果:

2017-07-02 13:19:36.828 Test[7272:3206224] asyncMainTask---start---
2017-07-02 13:19:36.828 Test[7272:3206224] asyncMainTask---end---
2017-07-02 13:19:36.834 Test[7272:3206224] Task1---<NSThread: 0x608000072480>{number = 1, name = main} 2017-07-02 13:19:36.834 Test[7272:3206224] Task2---<NSThread: 0x608000072480>{number = 1, name = main} 2017-07-02 13:19:36.834 Test[7272:3206224] Task3---<NSThread: 0x608000072480>{number = 1, name = main}

 结论:

   (1) 不开启了新线程

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

 

6、主队列 & 同步执行

- (void)syncMainTask{ dispatch_queue_t queue = dispatch_get_main_queue(); NSLog(@"syncMainTask---start---"); dispatch_sync(queue, ^{ NSLog(@"Task1---%@", [NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"Task2---%@", [NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"Task3---%@", [NSThread currentThread]); }); NSLog(@"syncMainTask---end---"); }

 打印结果:

2017-07-02 13:22:31.860 Test[7335:3230988] syncMainTask---start---

结论:

发生死锁,程序崩溃。

 

好了GCD系列的上篇就写到这里,我将在后续系列中详细介绍GCD的队列系列和用法,以及使用GCD可能造成的问题及解决方案,水平有限,有不对的地方还望批评指正!

 

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇在 iOS 中使用 iconfont 下一篇App Extensions篇之Sticker Pack ..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目