NSOperation實例封裝了需要執(zhí)行的操作和執(zhí)行操作所需的數(shù)據(jù),并且能夠以并發(fā)或非并發(fā)的方式執(zhí)行這個操作.有以下主要操作方法
- 開始
[opertion start];
- 取消
[opertion cancel];
- 監(jiān)聽完成
operation.completionBlock = ^() {
NSLog(@"執(zhí)行完畢");
}
可以使用它的子類有以方法
- NSInvocationOperation
NSInvocationOperation *invocationOperation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(test) object:nil];
[invocationOperation start];
- NSBlockOperation
NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"test blockOperation");
}];
[blockOperation start];
Operation 執(zhí)行優(yōu)先級
typedef NS_ENUM(NSInteger, NSOperationQueuePriority) {
NSOperationQueuePriorityVeryLow = -8L,
NSOperationQueuePriorityLow = -4L,
NSOperationQueuePriorityNormal = 0,
NSOperationQueuePriorityHigh = 4,
NSOperationQueuePriorityVeryHigh = 8
};
Operation 依賴關(guān)系
[operationB addDependency:operationA];
正確
錯誤的依賴關(guān)系
NSOperation Queue
一個operation可以調(diào)用start方法執(zhí)行(默認(rèn)是同步),也可以添加到operation queue中執(zhí)行(異步)逐哈。
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
- 添加一個operation
[queue addOperation:operation];
- 添加一組operations
[queue addOperations:@[operation] waitUntilFinished:No];
- 添加一block形式operation
[queue addOperationWithBlock:^{
NSLog(@"tset");
}];
隊列的最大并發(fā)操作數(shù)量(
@property NSInteger maxConcurrentOperationCount;
- 如果queue.maxConcurrentOperationCount = 1,那么該隊列就是一個串行隊列
- 默認(rèn) queue.maxConcurrentOperationCount = -1侮腹,并發(fā)數(shù)量由系統(tǒng)決定。
隊列中operation執(zhí)行順序
1九府,首先查看operation的狀態(tài)是否準(zhǔn)備好(ready)以及其依賴關(guān)系椎瘟。
2,查看operation的執(zhí)行優(yōu)先級(NSOperationQueuePriority)侄旬。