IOS 关于多线程开发

2017-06-15  本文已影响0人  croire_cfg

一:多线程间通信

多线程之间的通信可以体现在线程间数据的传递,或者是在某一个线程中完成操作之后转移到另一个线程继续操作

就IOS来说,最方便也最简洁的多线程方案当属GCD,其代码块简洁,可读性强,并且同样功能强大。我们可以通过

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0){

});

方法操作一个多线程,比如在此方法中下载一张图片,我们知道在子线程中获取图片之后需要返回主线程中刷新UI,这个时候就可以利用在子线程中获得的Image,给主线程的控件设置图片;

dispatch_async(dispatch_get_main_queue(), ^{[

    [self.button setImage:image forState:UIControlStateNormal];  

 }):

二、多个线程控制

有的我们会遇到需要同时开辟多个线程完成工作,并且还需要监控到所有线程在什么时候都完成工作。

比如:当我们需要用三个线程去同时请求数据,当二个线程AB都请求到数据后,再到其他线程来操作数据。这个时候我就必须知道什么时候三个数据全部都拿到了,我们才能继续下一步的操作。

应对这种情况我们可以使用dispatch_group来控制。

dispatch_group_t group = dispatch_group_create();

dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{

// 并行执行的线程A

});

dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{

// 并行执行的线程B

});

dispatch_group_notify(group, dispatch_get_global_queue(0,0), ^{

// 汇总结果

});

我们也可以通过用NSOpertion和NSOpertionQueue来处理这个问题

// 创建队列

NSOperationQueue *queue = [[NSOperationQueue alloc] init];

// 创建3个操作

NSOperation *a = [NSBlockOperation blockOperationWithBlock:^{

NSLog(@”operationA---“);

}];

NSOperation *b = [NSBlockOperation blockOperationWithBlock:^{

NSLog(@”operationB---“);

}];

NSOperation *c = [NSBlockOperation blockOperationWithBlock:^{

NSLog(@”operationC---“);

}];

// 添加依赖

[c addDependency:a];

c在a執行完之後再執行

[c addDependency:b];

// 执行操作

[queue addOperation:a];

[queue addOperation:b];

[queue addOperation:c];

上一篇下一篇

猜你喜欢

热点阅读