码迷,mamicode.com
首页 > 其他好文 > 详细

GCD 基础 (队列)

时间:2014-12-10 12:36:40      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:ios开发   多线程   gcd   异步   队列   

记笔记。。。-------

1.串行队列 —-一个接一个执行     
    创建一个队列
     dispatch_queue_t q = dispatch_queue_create(“gcd1", DISPATCH_QUEUE_SERIAL);
  for (int i = 0; i < 10; ++i) {
        // 同步任务顺序执行
        dispatch_sync(q, ^{
            NSLog(@"%@ %d", [NSThread currentThread], i);
        });
    }
    
    for (int i = 0; i < 10; ++i) {
        // 异步任务,并发执行,但是如果在串行队列中,仍然会依次顺序执行
        dispatch_async(q, ^{
            // [NSThread currentThread] 可以在开发中,跟踪当前线程
            // num = 1,表示主线程
            // num = 2,表示第2个子线程。。。
            NSLog(@"%@ %d", [NSThread currentThread], i);
        });
    }

2.并行队列
    // 特点:没有队形,执行顺序程序员不能控制!
    // 应用场景:并发执行任务,没有先后顺序关系
    // 并行队列容易出错!并行队列不能控制新建线程的数量!
dispatch_queue_t q = dispatch_queue_create("gcd2", DISPATCH_QUEUE_CONCURRENT);

 for (int i = 0; i < 10; ++i) {
        // 同步任务顺序执行
        dispatch_sync(q, ^{
            NSLog(@"%@ %d", [NSThread currentThread], i);
        });
    }



    for (int i = 0; i < 10; ++i) {
        // 异步任务 在不同线程中执行
        dispatch_async(q, ^{
            // [NSThread currentThread] 可以在开发中,跟踪当前线程
            // num = 1,表示主线程
            // num = 2,表示第2个子线程。。。
            NSLog(@"%@ %d", [NSThread currentThread], i);
        });
    }

3.全局队列(苹果为了方便多线程的设计,提供一个全局队列,供所有的APP共同使用)
  // 全局队列与并行队列的区别
    // 1> 不需要创建,直接GET就能用
    // 2> 两个队列的执行效果相同
    // 3> 全局队列没有名称,调试时,无法确认准确队列
 dispatch_queue_t q =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    
    for (int i = 0; i < 10; ++i) {
        // 同步任务顺序执行
        dispatch_sync(q, ^{
            NSLog(@"%@ %d", [NSThread currentThread], i);
        });
    }
    
    for (int i = 0; i < 10; ++i) {
        // 异步任务,并发执行,但是如果在穿行队列中,仍然会依次顺序执行
        dispatch_async(q, ^{
            // [NSThread currentThread] 可以在开发中,跟踪当前线程
            // num = 1,表示主线程
            // num = 2,表示第2个子线程。。。
            NSLog(@"%@ %d", [NSThread currentThread], i);
        });
    }

4. 主(线程)队列,保证操作在主线程上执行
   // 每一个应用程序都只有一个主线程
    // 为什么需要在主线程上工作呢?
    // 在iOS开发中,所有UI的更新工作,都必须在主线程上执行!
    dispatch_queue_t q = dispatch_get_main_queue();
    
    // 主线程是由工作的,而且除非将程序杀掉,否则主线程的工作永远不会结束!
    // 阻塞了!!!  所以不要用同步
    dispatch_sync(q, ^{
        NSLog(@"come here baby!");
    });
    
    // 异步任务,在主线程上运行,同时是保持队形的
    for (int i = 0; i < 10; ++i) {
        dispatch_async(q, ^{
            NSLog(@"%@ - %d", [NSThread currentThread], i);
        });
    }


GCD 基础 (队列)

标签:ios开发   多线程   gcd   异步   队列   

原文地址:http://blog.csdn.net/u010586842/article/details/41844437

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!