NSOperation高级操作

 

#import "ViewController.h"

 

@interface ViewController ()

 

@end

 

@implementation ViewController

 

- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

}

 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

    // 1.创建操作

    NSInvocationOperation *op1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(test:) object:@"lalala"];

    

    // 创建操作

    NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{

        //

        NSLog(@"++++++++++++++++%@",[NSThread currentThread]);

    }];

    

    // 创建操作

    NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{

        

        [self test1];

    }];

    

    // 当某个操作完成之后,就会回调这个方法.

    [op3 setCompletionBlock:^{

        // 对于Block,尽量用 set 方法,这样就不用去猜测 Block 的类型了.

        NSLog(@"操作完成之后的回调");

 

    }];

    

    

    

    // 2.将操作添加到操作队列中.

    

    // 1>创建非主队列

    NSOperationQueue *queue = [[NSOperationQueue alloc] init];

    

    NSOperationQueue *queue1 = [[NSOperationQueue alloc] init];

    

    // 操作的执行顺序和往队列中添加操作的顺序没有关系.

    

    

    // NSOperation 提供了操作按顺序执行的方法:添加操作依赖.

    

    // 注意:1.添加操作依赖,要避免相互依赖.

    //     2. 将添加操作依赖往前放.

    

    // 对于不同操作队列中的操作,添加操作依赖依然有效.

    

    // 操作1 op1依赖于 op2 :  op2 > op1

    [op1 addDependency:op2];

    [op2 addDependency:op3]; // op3 > 0p2

    

    

    

    // 只要将操作添加到操作队列中,操作队列就会执行并且管理其中的操作.

    [queue addOperation:op1];

    [queue addOperation:op2];

    [queue1 addOperation:op3];

    

    

 

    

    

}

 

 

- (void)test1

{

    NSLog(@"======================%@",[NSThread currentThread]);

 

}

 

 

- (void)test:(NSString *)str

{

    NSLog(@"-----------------%@%@",str,[NSThread currentThread]);

}

 

@end

posted @ 2015-09-05 00:43  记忆里的那座沙城  阅读(175)  评论(0编辑  收藏  举报