iOS探究 --- NSOperationd的基本使用

相對于GCD。NSOperation更加靈活,能夠自如地操作生命周期。

NSOperation是一個抽象的類,在使用時,使用的是他的兩個子類NSInvocationOperation和

基本實現(xiàn)

NSInvocationOperation:target形式

- (void)baseUseDemo {
    NSInvocationOperation *op = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(doSomething) object:nil];
    [NSOperationQueue.mainQueue addOperation:op];
}

- (void)doSomething {
    NSLog(@"hello Operation");
}

NSBlockOperation:block形式

- (void)baseUseDemo {
    NSBlockOperation *blockOp = [[NSBlockOperation alloc] init];
    //添加執(zhí)行代碼塊
    [blockOp addExecutionBlock:^{
        NSLog(@"This is BlockOperation!");
    }];
    
    //設(shè)置監(jiān)聽
    blockOp.completionBlock = ^{
        NSLog(@"Completion");
    };
    //添加到隊列
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    [queue addOperation:blockOp];
}

優(yōu)先級

    blockOp.qualityOfService = NSQualityOfServiceUserInteractive;
typedef NS_ENUM(NSInteger, NSQualityOfService) {
    NSQualityOfServiceUserInteractive = 0x21,
    NSQualityOfServiceUserInitiated = 0x19,
    NSQualityOfServiceUtility = 0x11,
    NSQualityOfServiceBackground = 0x09,
    NSQualityOfServiceDefault = -1
} API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0));

UserInteractive優(yōu)先級最高,NSQualityOfServiceBackground優(yōu)先級最低。

設(shè)置并發(fā)數(shù)

queue.maxConcurrentOperationCount = 2;

設(shè)置依賴關(guān)系

- (void)dependencyDemo {
    
    NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
        [NSThread sleepForTimeInterval:0.5];
        NSLog(@"任務(wù)1");
    }];
    
    NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
        [NSThread sleepForTimeInterval:0.5];
        NSLog(@"任務(wù)2");
    }];
    
    NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
        [NSThread sleepForTimeInterval:0.5];
        NSLog(@"任務(wù)3");
    }];
    
    [op2 addDependency:op1];
    [op3 addDependency:op2];
    
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    [queue addOperations:@[op1, op2, op3] waitUntilFinished:YES];
}

掛起

[queue setSuspended:YES];
注意:suspended不能掛起已經(jīng)被執(zhí)行的任務(wù)。

[queue cancelAllOperations];
干掉所有任務(wù)。下次得重新添加任務(wù)

?著作權(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)容