#import "ViewController.h"
@interface ViewController ()
@property(nonatomic,strong)NSOperationQueue *myQueue;
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
self.myQueue=[[NSOperationQueuealloc] init];
[self demoOp1];
//[self demoOp2 ];
//[self demoOp3];
}
-(void)demoOp1{
// NSBlockOperation *block=[NSBlockOperation blockOperationWithBlock:^{
// NSLog(@"%@",[NSThread currentThread]);
// }];
//所有的自定义队列,都在子线程中运行
// [self.myQueue addOperation:block];
//新建线程是有开销的
//在设定同时并发的最大线程数时候,如果前一个线程工作完成,但是还没有销毁,会新建线程
//应用场景:网络开发下,下载工作!(线程开销:CPU,MEM)电量
//如果是3G,开3个子线程
//如果是WIFi,开6个子线程
[self.myQueuesetMaxConcurrentOperationCount:1];
for (int i=0; i<10; i++) {
[self.myQueueaddOperationWithBlock:^{
NSLog(@"%@",[NSThreadcurrentThread]);
}];
}
// [[NSOperationQueue mainQueue] addOperationWithBlock:^{
// NSLog(@"%@",[NSThread currentThread]);
// }];
}
-(void)demoOp2{
NSInvocationOperation *operation=[[NSInvocationOperationalloc] initWithTarget:selfselector:@selector(test:)object:@"hahaha"];
[self.myQueueaddOperation:operation];
}
-(void)demoOp3{
NSBlockOperation *op1=[NSBlockOperationblockOperationWithBlock:^{
NSLog(@"下载图片:%@",[NSThreadcurrentThread]);
}];
NSBlockOperation *op2=[NSBlockOperationblockOperationWithBlock:^{
NSLog(@"修饰图片:%@",[NSThreadcurrentThread]);
}];
NSBlockOperation *op3=[NSBlockOperationblockOperationWithBlock:^{
NSLog(@"保存图片:%@",[NSThreadcurrentThread]);
}];
NSBlockOperation *op4=[NSBlockOperationblockOperationWithBlock:^{
NSLog(@"更新UI:%@",[NSThreadcurrentThread]);
}];
//设定执行顺序,addDependency依赖,可能会开多个,但不会太多
//依赖关系是可以跨队列的
[op2 addDependency:op1];
[op3 addDependency:op2];
[op4 addDependency:op3];
//GCD是串行队列,异步任务,只会开一个线程
[self.myQueueaddOperation:op1];
[self.myQueueaddOperation:op2];
[self.myQueueaddOperation:op3];
//所有UI的更新都在主线程上进行
[[NSOperationQueuemainQueue] addOperation:op4];
}
-(void)test:(id)obj{
NSLog(@"%@--%@",[NSThreadcurrentThread],obj);
}
@end