iOS 多線程開發(fā)之NSOperation與NSOperation Queue

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í)行(默認是同步),也可以添加到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,那么該隊列就是一個串行隊列
  • 默認 queue.maxConcurrentOperationCount = -1,并發(fā)數(shù)量由系統(tǒng)決定。
隊列中operation執(zhí)行順序

1,首先查看operation的狀態(tài)是否準備好(ready)以及其依賴關(guān)系。
2,查看operation的執(zhí)行優(yōu)先級(NSOperationQueuePriority)。

參考文檔

Operation Queues
Advanced NSOperations

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容