码迷,mamicode.com
首页 > 移动开发 > 详细

iOS 开发之多线程之GCD

时间:2014-11-29 23:07:13      阅读:437      评论:0      收藏:0      [点我收藏+]

标签:gcd   ios   线程   多线程   并发   

1.GCD(Grand Centrol Dispath)

并行:宏观以及微观都是两个人再拿着两把铁锹在挖坑,一小时挖两个大坑

并发:宏观上是感觉他们都在挖坑,微观是他们是在使用一把铁锹挖坑,一小时后他们挖了两个小坑。

总结:就单个cpu来说,大部分进程是并发进行的,就是一把铁锹,你一下我一下,只是间隔时间较短,用户感觉不到而已。


应用

GCD包括:

(1)实际使用中

//dispatch_get_global_queue(0, 0)第一个0是优先级,第二个保留字段
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        //在这里可以是数据请求
         NSString* result = [self requestData:parameter];
        //在这里返回主线程刷新数据
        dispatch_async(dispatch_get_main_queue(), ^{
            [mainTableView reloadData];
        });
    });

举例说明:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    NSURL * url = [NSURL URLWithString:@"http://www.baidu.com"];
    NSError * error;
    NSString * data = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
    if (data != nil) {
        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"call back, the data is: %@", data);
        });
    } else {
        NSLog(@"error when download:%@", error);
    }
});


(2)也可以自己创建(我是不怎么用)

串行队列,顾名思义,一串嘛,那就得并发执行喽

//自己创建serial queue
    dispatch_queue_t queue = dispatch_queue_create("com.class15.queue", DISPATCH_QUEUE_SERIAL);
    //异步执行线程
    dispatch_async(queue, ^{
        NSLog(@"任务1:%@  %d", [NSThread currentThread],[NSThread currentThread].isMainThread);
    });



并行队列通过dispatch_get_global_queue获取,由系统创建三个不同优先级的dispatch queue

//创建自己的队列
    dispatch_queue_t queue = dispatch_queue_create("com.class15.comcrrentQueue", DISPATCH_QUEUE_CONCURRENT);
    
    dispatch_async(queue, ^{
        NSLog(@"任务1:%@  %d", [NSThread currentThread],[NSThread currentThread].isMainThread);
    });

iOS 开发之多线程之GCD

标签:gcd   ios   线程   多线程   并发   

原文地址:http://blog.csdn.net/u013375242/article/details/41601833

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