iOS 开发之多线程之GCD

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);
    });

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。