1. 程式人生 > >NSOperation 執行緒終止 順序執行

NSOperation 執行緒終止 順序執行

 剛好遇見你 - J

1,今天更新一下關於執行緒的一些知識。

相對於 GCD ,NSoperation 使用更加靈活,GCD雖然方便 但是一旦開啟,不能終止他的任務了,在開發中不太適合有些場景。

那麼 NSOperation 使用需要注意一點,就是依賴新增的時間 應該是在新增進佇列之前。不然依賴無效。

    @property (nonatomic, strong) NSInvocationOperation * invo; //宣告一個屬性


NSOperationQueue * j_sQueue = [[NSOperationQueuealloc]init];

    j_sQueue.

maxConcurrentOperationCount = 1; // 最大併發數為1 相當於 GCD的序列佇列

_invo =[[NSInvocationOperationalloc]initWithTarget:selfselector:@selector(log) object:nil];

NSBlockOperation * bo =[NSBlockOperationblockOperationWithBlock:^{

for (int i = 0; i <5; i ++) {

sleep(1);

NSLog(@"-------");

        }

    }];

//

注意依賴必須將任務新增到佇列中前面新增。

    [_invoaddDependency:bo];

//

NSLog(@"111 %d - %d - %d", [_invoisCancelled], [_invoisFinished], [_invoisExecuting]);

    [j_sQueue addOperation:_invo]; //新增進佇列的任務在很短的時間就會開始執行

    [j_sQueue addOperation:bo];

//    [_invo cancel];

NSLog(@"222 %d - %d - %d", [_invoisCancelled], [

_invoisFinished], [_invoisExecuting]);

}

- (void)log

{

for (int i = 0; i <100; i ++) {

sleep(1);

NSLog(@"%d", i);

NSLog(@"333 %d - %d - %d", [_invoisCancelled], [_invoisFinished], [_invoisExecuting]);

if ([_invoisCancelled]/*執行緒已經停止,需要跳出迴圈*/) {

return; // 跳出迴圈。

        }

    }

}

後期更新中。。。