#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