iOS 开发之多线程之GCD

1.GCD(Grand Centrol Dispath)

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

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

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


应用

GCD包括:

(1)实际使用中( 而系统默认就有一个串行队列main_queue和并行队列global_queue:

[cpp]  view plain copy
  1. dispatch_queue_t globalQ = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);  
  2. dispatch_queue_t mainQ = dispatch_get_main_queue();  
)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值