多线程在开发过程中的作用想必每个人都很清楚,极大程度上的利用cpu提高程序的运行效率和用户体验,今天就来理一下在iOS开发过程中常用到的几个关于多线程的类。
NSThread
NSThread的使用更加面向对象,简单易用,并且可以直接操作线程对象,但是在实际的运用中使用的并不是很多,是因为直接操作线程就以为着要自己管理线程,所以NSThread的使用并不是最多的。下面看一下NSThread的具体使用方法。
1 | // 创建1. |
GCD
方式 | 并发队列 | 手动创建串行队列 | 主队列 |
---|---|---|---|
同步(sync) | 没有 开启新线程,串 行执行任务 |
没有 开启新线程,串 行执行任务 |
没有 开启新线程,串 行执行任务 |
异步(async) | 有 开启新线程,并发 行执行任务 |
有 开启新线程,串 行执行任务 |
没有 开启新线程,串 行执行任务 |
1 | // 创建并发队列 |
NSOperation
基本使用
1 | NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{ |
简单方法
1 | NSOperationQueue *queue = [[NSOperationQueue alloc] init]; |
一些属性
1 | // 创建队列 |
依赖
1 | 类似于GCD 队列组 |
线程间通讯
[[[NSOperationQueue alloc] init] addOperationWithBlock:^{
// 图片的网络路径
NSURL *url = [NSURL URLWithString:@"http://i1.piimg.com/569091/4d218e7a3a6bd868s.jpg"];
// 加载图片
NSData *data = [NSData dataWithContentsOfURL:url];
// 生成图片
UIImage *image = [UIImage imageWithData:data];
// 回到主线程
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
self.imageView.image = image;
}];
}];