NSOperationQueue最大并發(fā)量、暫停、取消

當(dāng)使用暫停、取消任務(wù)時(shí),需要等到正在執(zhí)行的任務(wù)執(zhí)行完成后,才會(huì)執(zhí)行這個(gè)動(dòng)作。其中取消任務(wù)的動(dòng)作不可逆,取消之后任務(wù)不能重新開啟。具體代碼如下:

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    //當(dāng)self.operationQueue.suspended 為YES時(shí)執(zhí)行任務(wù),為NO時(shí)暫停任務(wù)
    //每個(gè)任務(wù)都有執(zhí)行狀態(tài),暫停的時(shí)候正在執(zhí)行的任務(wù)執(zhí)行完,才會(huì)暫停
    self.operationQueue.suspended = !self.operationQueue.suspended;
    
    //取消所有的任務(wù),正在執(zhí)行的任務(wù)執(zhí)行完,才會(huì)執(zhí)行這個(gè)動(dòng)作,和暫停類似。該方法不可逆,取消后不能恢復(fù)執(zhí)行
//    [self.operationQueue  cancelAllOperations];
}


//NSOperationQueue,最大并發(fā)數(shù)
- (void)operationQueueMaxConcurrentOperationCount
{
    //1:創(chuàng)建隊(duì)列
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    /*
     默認(rèn)是并發(fā)隊(duì)列,如果最大并發(fā)數(shù)>1,并發(fā)
     如果最大并發(fā)數(shù)==1,串行
     系統(tǒng)默認(rèn)的并發(fā)數(shù)是-1,所有任務(wù)全部并發(fā)執(zhí)行
     */
    queue.maxConcurrentOperationCount = 1;
    //2:封裝操作
    NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
        [NSThread sleepForTimeInterval:1.0];
        NSLog(@"1------%@",[NSThread currentThread]);
    }];
    NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
        [NSThread sleepForTimeInterval:1.0];
        NSLog(@"2------%@",[NSThread currentThread]);
    }];
    NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
        [NSThread sleepForTimeInterval:1.0];
        NSLog(@"3------%@",[NSThread currentThread]);
    }];
    NSBlockOperation *op4 = [NSBlockOperation blockOperationWithBlock:^{
        [NSThread sleepForTimeInterval:1.0];
        NSLog(@"4------%@",[NSThread currentThread]);
    }];
    NSBlockOperation *op5 = [NSBlockOperation blockOperationWithBlock:^{
        [NSThread sleepForTimeInterval:1.0];
        NSLog(@"5------%@",[NSThread currentThread]);
    }];
    NSBlockOperation *op6 = [NSBlockOperation blockOperationWithBlock:^{
        [NSThread sleepForTimeInterval:1.0];
        NSLog(@"6------%@",[NSThread currentThread]);
    }];
    
    //3:把操作添加到隊(duì)列
    [queue addOperation:op1];
    [queue addOperation:op2];
    [queue addOperation:op3];
    [queue addOperation:op4];
    [queue addOperation:op5];
    [queue addOperation:op6];
    self.operationQueue = queue;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,021評(píng)論 25 709
  • 小番茄。 又名千禧。黃色的叫圣女果,正宗的學(xué)名叫西紅柿,俗稱番茄。 由于農(nóng)業(yè)的發(fā)展,各種轉(zhuǎn)基因,雜交等的作用,使最...
    田田圈Tina閱讀 1,216評(píng)論 0 3

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