NSOperation高級操做

 

#import "ViewController.h"spa

 

@interface ViewController ()隊列

 

@endget

 

@implementation ViewControllerit

 

- (void)viewDidLoad {io

    [super viewDidLoad];event

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

}test

 

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

{object

    // 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

相關文章
相關標籤/搜索