iOS開發 多任務之間具有依賴關系實現方案

在實際開發過程中,有時候需要設置任務之間的依賴關系,iOS主要有兩種方案,一種是基于GCD,另一種是基于NSOperation,下面分別介紹。

/**任務1,2并行執行,執行完后任務3執行*/

1.基于GCD的實現方案

/**方法1*/

[objc]view plaincopy

dispatch_group_t?group?=dispatch_group_create();

dispatch_group_async(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),?^{

NSLog(@"任務1");

});

dispatch_group_async(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),?^{

NSLog(@"任務2");

});

dispatch_group_notify(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),?^{

NSLog(@"任務3");

});

/*方法2*/

/*

*dispatch_barrier_async會等待當前隊列的任務執行完之后再執行dispatch_barrier_async(myqueue, ^{

NSLog(@"任務3");

});中定義的任務,該任務執行完成后,會繼續執行隊列后面的任務。

*/

[objc]view plaincopy

dispatch_queue_t?myqueue?=dispatch_queue_create("myqueue.queue",DISPATCH_QUEUE_CONCURRENT);

dispatch_async(myqueue,?^{

NSLog(@"任務1");

});

dispatch_async(myqueue,?^{

NSLog(@"任務2");

});

dispatch_barrier_async(myqueue,?^{

NSLog(@"任務3");

});

dispatch_async(myqueue,?^{

NSLog(@"任務4");

});

dispatch_async(myqueue,?^{

NSLog(@"任務5");

});

任務1,2并行執行,執行完后任務3執行,執行完后任務4,5并行執行。

2.基于NSOPeration實現

[objc]view plaincopy

NSBlockOperation*opration1=?[NSBlockOperationblockOperationWithBlock:^{

NSLog(@"任務1");

}];

NSBlockOperation*opration2=?[NSBlockOperationblockOperationWithBlock:^{

NSLog(@"任務2");

}];

NSOperationQueue*operationQueue?=?[[NSOperationQueuealloc]init];

[operationQueueaddOperation:opration1];

[operationQueueaddOperation:opration2];

NSBlockOperation*opration3=?[NSBlockOperationblockOperationWithBlock:^{

NSLog(@"任務3");

}];

[opration3addDependency:opration1];

[opration3addDependency:opration2];

[operationQueueaddOperation:opration3];

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • iOS中多線程編程工具主要有: NSThread NSOperation GCD 這三種方法都簡單易用,各有千秋....
    liudhkk閱讀 860評論 1 0
  • 一、前言 上一篇文章iOS多線程淺匯-原理篇中整理了一些有關多線程的基本概念。本篇博文介紹的是iOS中常用的幾個多...
    nuclear閱讀 2,074評論 6 18
  • 在這篇文章中,我將為你整理一下 iOS 開發中幾種多線程方案,以及其使用方法和注意事項。當然也會給出幾種多線程的案...
    張戰威ican閱讀 615評論 0 0
  • NSThread 第一種:通過NSThread的對象方法 NSThread *thread = [[NSThrea...
    攻城獅GG閱讀 859評論 0 3
  • 關于迷茫,我思考了很久,直到前幾天...... 我的迷茫的起源: 作為一個大學畢業一年多的機械專業學生,我沒辦法不...
    半部春秋92閱讀 365評論 0 0