1.概述
- NSOperation的作用
- 配合使用NSOperation和NSOperationQueue也能实现多线程编程
- NSOperation和NSOperationQueue实现多线程的具体步骤
- 先将需要执行的操作封装到一个NSOperation对象中
- 然后将NSOperation对象添加到NSOperationQueue中
- 系统会自动将NSOperationQueue中的NSOperation取出来
- 将取出的NSOperation封装的操作放到一条新线程中执行
2.NSOperation的子类
- NSOperation是个抽象类,并不具备封装操作的能力,必须使用它的子类
- 使用NSOperation子类的方式有3种
- NSInvocationOperation
- NSBlockOperation
- 自定义子类继承NSOperation,实现内部相应的方法
3.NSInvocationOperation基本使用
- 创建NSInvocationOperation对象,并且将任务封装到对象中
- 执行封装的操作,利用start对象方法
-(void)makeNSInvocationOperation{
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(demo) object:nil];
[operation start];
}
-(void)demo{
NSLog(@"%@",[NSThread currentThread]);
}
4.NSBlockOperation基本使用
- 创建NSBlockOperation,并且封装操作到block
- NSBlockOperation可以额外再添加操作,不过额外添加的操作会在子线程中执行
-(void)blockOperation{
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"1---%@",[NSThread currentThread]);
}];
[operation addExecutionBlock:^{
NSLog(@"2---%@",[NSThread currentThread]);
}];
[operation addExecutionBlock:^{
NSLog(@"3---%@",[NSThread currentThread]);
}];
[operation start];
}
5.自定义Operation
- 要想使用自定义Operation,必须新建继承自NSOperation的类,并且重写main方法,添加自定义操作
-(void)customOperation{
ZJOperation *op1 = [[ZJOperation alloc] init];
[op1 start];
ZJOperation *op2 = [[ZJOperation alloc] init];
[op2 start];
}