#pragma mark 开启多线程
-----------------------------------------
//1.创建一个操作队列
NSOperationQueue *operationQueue = [[NSOperationQueue alloc]init];
(使用多线程时通常需要控制线程的并发数,线程会消耗系统资源,同时运行的线程过多,系统会变慢) operationQueue.maxConcurrentOperationCount = 5;//设置最大并发线程数
-----------------------------------------
//2.向队列添加操作
for (int i = 0; i < IMAGE_COUNT; i++) {
//方法1:创建操作块,
NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{
[self loadImage : [NSNumber numberWithInt:i]];
}];
添加到队列
[operationQueue addOperation:blockOperation];
//方法2:祷文invocation
NSInvocationOperation *invocationOp = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(loadImage:) object:[NSNumber numberWithInt:i]];
[operationQueue addOperation:invocationOp];
}
-----------------------------------------
//方法3:控制线程的执行顺序
NSMutableArray *arr = [NSMutableArray array];
//创建所有的操作
for (int i = 0; i < IMAGE_COUNT; i++) {
NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{
[self loadImage:[NSNumber numberWithInt:i]];
}];
[arr addObject:op];
}
对操作进行依赖设置
for (int i = 0; i < IMAGE_COUNT-1; i++) {
[arr[i] addDependency:arr[i+1]];
}
把操作加到队列中
for (int i = 0; i < IMAGE_COUNT; i++) {
[operationQueue addOperation:arr[i]];
}
-----------------------------------------
#pragma mark 子线程函数
- (void) loadImage : (NSNumber *)index{
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://desk.fd.zol-img.com.cn/t_s2560x1600c5/g5/M00/00/03/ChMkJ1ebIWKIPWMZACaN5neCgl8AAT9_QDdIJ8AJo3-004.jpg"]];
回归主线程更新UI
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
主线程
UIImage *image = [UIImage imageWithData:data];
UIImageView *imageView = _imageViews[[index intValue]];
imageView.image = image;
}];
}