- (void)viewDidLoad {
[super viewDidLoad];
[self begin];
}
#pragma mark 开启多线程
-(void)begin{
//创建一个操作队列
NSOperationQueue *opertion=[[NSOperationQueue alloc]init];
opertion.maxConcurrentOperationCount=5;//设置最大并发线程数
//向队列添加操作
// for (int i=0; i<IMAGE_COUNT; i++) {
// //方法一:创建操作块,添加到队列
// NSBlockOperation *block=[NSBlockOperation blockOperationWithBlock:^{
// [self loadImage:i];
// }];
// //添加
// [opertion addOperation:block];
//
// //方法二:祷文invocation
// NSInvocationOperation *invoca=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(loadImageI:) object:[NSNumber numberWithInt:i]];
// [opertion addOperation:invoca];
// }
//方法三:控制线程的执行顺序
NSMutableArray *arrayOper=[[NSMutableArray alloc]init];
for (int i=0; i<IMAGE_COUNT; i++) {
NSBlockOperation *op1=[NSBlockOperation blockOperationWithBlock:^{
[self myThread:[NSNumber numberWithInt:i]];
}];
[arrayOper addObject:op1];
}
//依赖设置
for (int i=0; i<IMAGE_COUNT-1; i++) {
[arrayOper[i+1] addDependency:arrayOper[i]];
}
for (int i=0; i<IMAGE_COUNT; i++) {
[opertion addOperation:arrayOper[i]];
}
}
//方法一;
-(void)loadImage:(NSNumber *)index{
NSThread *thread=[[NSThread alloc]initWithTarget:self selector:@selector(myThread:) object:[NSNumber numberWithInt:[index intValue]]];
if ([index intValue]==14) {
thread.threadPriority=1;
}else{
thread.threadPriority=0;
}
thread.name=[NSString stringWithFormat:@"线程:%@",index];//给线程命名
[thread start];//执行线程 (启动线程,并不代表立即执行。而是出于一种就绪状态,当系统调用时才真正执行)
}
-(void)myThread:(NSNumber *)sender{
NSLog(@"%@",[NSThread currentThread].name);//打印当前线程的名字
//当不是最后一个线程的时候
// if (![sender isEqual:@8]) {
// //线程休眠2秒
// [NSThread sleepForTimeInterval:2];
// }
NSData *data=[NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@",_arrI[sender.intValue]]]];
[[NSOperationQueue mainQueue]addOperationWithBlock:^{
UIImage *imaged=[UIImage imageWithData:data];
UIImageView *image=_muarr[[sender intValue]];
image.image=imaged;
}];
// NSArray *array=@[data,sender];
// //这个方法是NSObject的分类方法,每个NSObject对象都有这个方法
// [self performSelectorOnMainThread:@selector(mainThreadHandle:) withObject:array waitUntilDone:YES];
}
#pragma mark 回归主线程的一个更新UI的方法
//-(void)mainThreadHandle:(NSArray *)senders{
//
// UIImage *imaged=[UIImage imageWithData:senders[0]];
// UIImageView *image=_muarr[[senders[1] intValue]];
// image.image=imaged;
//}
//方法二:
//-(void)loadImageI:(NSNumber *)number{
//
//}