多線程 -- NSOperation

介紹

多線程是為了不影響UI響應(yīng)

封裝后可以避免重復(fù)代碼

NSOperationQueue:封裝線程管理部分
NSOperation:封裝任務(wù)部分

  • NSInvocationOperation:selector編寫任務(wù)
  • NSBlockOperation:block編寫任務(wù)
  • 任務(wù)可以用依賴關(guān)系串起來

NSOperation抽象基類

提供了接口。

  • 執(zhí)行

    • start
    • 設(shè)置狀態(tài)調(diào)用main
    • cancel
    • waitUntilFinished
  • 任務(wù)定義

  • main

  • 默認(rèn)不做事

  • 會(huì)在NSOperation提供的AutoRealeasePool中執(zhí)行

  • 定義NSOperation 子類時(shí)覆蓋

NSInvocationOperation

創(chuàng)建

  • initWithTarget selector object
  • initWithInvocation
- (void)viewDidLoad {
    [super viewDidLoad];
    NSOperation *no = [[NSInvocationOperation alloc]  initWithTarget:self selector:@selector(say1) object:nil];
    [no start];
}
- (void) say1{
    for (int i=0; i<10; i++) {
        NSLog(@"%d",i);
    }
}

NSBlockOperation

創(chuàng)建
blockOperationWithBlock

NSOperation *bo = [NSBlockOperation blockOperationWithBlock:^{
        for (int i=0; i<10; i++) {
            NSLog(@"%d",i);
        }
    } ];

追加新的Block
addExecutionBlock

[bo addExecutionBlock:^{
        NSLog(@"addExe");
    }];

這里需要注意一點(diǎn),block本來是儲(chǔ)存在棧上的,在加入NSBlockOperation后會(huì)對(duì)block進(jìn)行copy,使它們存放在堆上。這時(shí)候再對(duì)原有的block進(jìn)行修改也不會(huì)有影響。

   void (^xixi)(void) = ^(){
        NSLog(@"first");
    };
    NSBlockOperation *bo = [NSBlockOperation blockOperationWithBlock:xixi];
    xixi = ^(){
        NSLog(@"second");
    };
    [bo addExecutionBlock:xixi];
    
    [bo start];

NSOperation依賴關(guān)系

addDependency:dep
dep結(jié)束后 才執(zhí)行
注意不要循環(huán)依賴

NSOperation 狀態(tài)

.name
.ready
.asynchronous
setCompletionBlock
執(zhí)行后置為nil

NSOperationQueue

Queue operations
alloc init 或者 new 創(chuàng)建

  • add

  • addOperation

  • addOperations

  • addOperationWithBlock(省略創(chuàng)建,但是不能管理dependency)

  • exec control

  • setMaxConcurrentOperationCount

  • addDependency

  • cancelAllOperation

  • setSuspended

  • waitUntilAlloperationAreFinished

如果Dep所在隊(duì)列堵塞,本身所在的queue也會(huì)堵塞。
最安全是dep都在一個(gè)queue里。

mainQueue

最后編輯于
?著作權(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)容

  • 簡(jiǎn)介 NSOpreation的作用p 配合NSOperation和NSOperationQueue也能夠?qū)崿F(xiàn)多線程...
    一抹月光3053閱讀 1,139評(píng)論 6 9
  • Mac OS X 10.6及iOS4.0之后導(dǎo)入了可以使全體線程更高效運(yùn)行,并且使并行處理應(yīng)用更易開發(fā)的架構(gòu),GC...
    怎樣m閱讀 3,998評(píng)論 1 9
  • NSOperation實(shí)現(xiàn)流程: 只要將NSOperation放入NSOperationQueue線程隊(duì)列中,就會(huì)...
    wlw_花田半畝閱讀 599評(píng)論 0 3
  • 和GCD的對(duì)比 操作隊(duì)列,比GCD更早,GCD在設(shè)計(jì)上很多都是基于操作隊(duì)列的原理構(gòu)建的。在iOS4之后,操作隊(duì)列的...
    doudo閱讀 264評(píng)論 0 0
  • 【花事】 碧色晴川岸 枝離舊葉開 只是徘徊過 花事已成災(zāi) ---潛水魚
    潛水魚2017閱讀 189評(píng)論 0 1

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