1情屹、創(chuàng)建:
方式一:
// 創(chuàng)建操作
NSInvocationOperation *op = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(test) object:nil];
// 創(chuàng)建隊列并把操作添加到隊列
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperation:op];
方式二:
// 創(chuàng)建操作
NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{
// sth long to do
}];
// 創(chuàng)建隊列并添加操作
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperation:op];
方式三:常見操作(線程通信):
// 自定義隊列
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
// 在自定義隊列執(zhí)行
[queue addOperationWithBlock:^{
NSLog(@"a long operation");
// sth to do in sel-cre queue
// 在主隊列執(zhí)行
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
NSLog(@"update UIs");
// sth to do in main queue
}];
}];
2坪仇、暫停
queue.suspended = !queue.isSuspended;
這個操作需要謹慎,在queue.operationCount == 0 的時候要操作垃你,會產(chǎn)生不必要的麻煩椅文,需要判斷一下。
3惜颇、取消
[queue cancelAllOperations];
4皆刺、設置最大并發(fā)線程數(shù):
queue.maxConcurrentOperationCount = 3;
5、設置依賴關系:
依賴關系可以讓幾個不同的操作有執(zhí)行的先后順序(在不同線程):
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"A");
}];
NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"B");
}];
NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"C");
}];
[op2 addDependency:op1];
[op3 addDependency:op2];
[queue addOperations:@[op1, op2, op3] waitUntilFinished:NO];