#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
不能直接Operation是因为它里面没有直接操作的方法 只是一个基类 (抽象类)
NSInvocationOperation *invocation0 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(act:) object:@"invocation0"];
如果单独使用Operation 必须手动启动
[invocation start];
Operation是在当前线程去执行(同步执行)
NSInvocationOperation *invocation1 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(act:) object:@"invocation1"];
NSInvocationOperation *invocation2 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(act:) object:@"invocation2"];
NSInvocationOperation *invocation3 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(act:) object:@"invocation3"];
NSInvocationOperation *invocation4 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(act:) object:@"invocation4"];
NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{
具体执行的方法 任务
[self act:@"blockOperation"];
}];
添加操作
NSBlockOperation 的操作数大于1 的时候 会开辟线程去执行
[blockOperation addExecutionBlock:^{
[self act:@"blockOperation2"];
}];
[blockOperation start];
operation 默认在当期线程去执行 (同步执行)
可以使用线程队列NSOperationQueue去管理线程 (默认会开辟线程去执行) 异步执行 不用手动去启动线程
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
可以线程队列的最大并发数(最多允许多少操作同时执行)
queue.maxConcurrentOperationCount = 3;
设置Operation的依赖关系
[invocation1 addDependency:invocation0];
[invocation2 addDependency:invocation1];
[invocation3 addDependency:invocation2];
[invocation4 addDependency:invocation3];
[blockOperation addDependency:invocation4];
[queue addOperation:invocation0];
[queue addOperation:invocation1];
[queue addOperation:invocation2];
[queue addOperation:invocation3];
[queue addOperation:invocation4];
[queue addOperation:blockOperation];
}
- (void)act:(id)sender
{
NSLog(@"%@%@",[NSThread currentThread],sender);
}
@end