1.NSInvocationOperation
创建NSInvocationOperation对象
- (id)initWithTarget:(id)target selector:(SEL)sel object:(id)arg;
调用start方法开始执行操作
- (void)start;
一旦执行操作,就会调用target的sel方法
注意
默认情况下,调用了start方法后并不会开一条新线程去执行操作,而是在当前线程同步执行操作
只有将NSOperation放到一个NSOperationQueue中,才会异步执行操作
1 -(void)invocation 2 { 3 // NSOperation *op = [[NSOperation alloc]init]; 4 5 /* 6 第一个参数:目标对象 7 第二个参数:选择器,要调用的方法 8 第三个参数:方法要传递的参数 9 */ 10 NSInvocationOperation *op = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(download) object:nil]; 11 // 12 // //启动操作 13 [op start]; 14 15 } 16 -(void)download 17 { 18 NSLog(@"---%s---%@",__func__,[NSThread currentThread]); 19 }
2.NSBlockOperation
创建NSBlockOperation对象
+ (id)blockOperationWithBlock:(void (^)(void))block;
通过addExecutionBlock:方法添加更多的操作
- (void)addExecutionBlock:(void (^)(void))block;
注意:只要NSBlockOperation封装的操作数 > 1,就会异步执行操作
1 -(void)blockOperation 2 { 3 //1.封装操作 4 NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{ 5 //在主线程 6 NSLog(@"1------%@",[NSThread currentThread]); 7 8 }]; 9 10 NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{ 11 NSLog(@"2------%@",[NSThread currentThread]); 12 }]; 13 14 //2.追加操作 15 //在子线程中执行 16 [op1 addExecutionBlock:^{ 17 NSLog(@"3------%@",[NSThread currentThread]); 18 }]; 19 [op1 addExecutionBlock:^{ 20 NSLog(@"4------%@",[NSThread currentThread]); 21 }]; 22 23 [op1 addExecutionBlock:^{ 24 NSLog(@"5------%@",[NSThread currentThread]); 25 }]; 26 27 28 //3.启动操作执行 29 [op start]; 30 [op1 start]; 31 32 }
3.自定义子类继承NSOperation,实现内部相应的方法
自定义的子类要实现-(void) Main方法
如下:
#import "YSOperation.h" @implementation YSOperation //1.高封装,信息隐蔽 //2.复用性 -(void)main { NSLog(@"---main---%@",[NSThread currentThread]); NSLog(@"1------%@",[NSThread currentThread]); } @end -------------------------------------------------------------------------------------------- -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { YSOperation *op = [[YSOperation alloc]init]; YSOperation *op1 = [[YSOperation alloc]init]; [op start]; [op1 start]; // [[NSThread alloc]init] } 示例
浙公网安备 33010602011771号