IOS 關于多線程開發(fā)

一:多線程間通信

多線程之間的通信可以體現(xiàn)在線程間數據的傳遞,或者是在某一個線程中完成操作之后轉移到另一個線程繼續(xù)操作

就IOS來說,最方便也最簡潔的多線程方案當屬GCD,其代碼塊簡潔,可讀性強,并且同樣功能強大。我們可以通過

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0){

});

方法操作一個多線程,比如在此方法中下載一張圖片,我們知道在子線程中獲取圖片之后需要返回主線程中刷新UI,這個時候就可以利用在子線程中獲得的Image,給主線程的控件設置圖片;

dispatch_async(dispatch_get_main_queue(), ^{[

? ? [self.button setImage:image forState:UIControlStateNormal]; ?

?}):


二、多個線程控制

有的我們會遇到需要同時開辟多個線程完成工作,并且還需要監(jiān)控到所有線程在什么時候都完成工作。

比如:當我們需要用三個線程去同時請求數據,當二個線程AB都請求到數據后,再到其他線程來操作數據。這個時候我就必須知道什么時候三個數據全部都拿到了,我們才能繼續(xù)下一步的操作。

應對這種情況我們可以使用dispatch_group來控制。

dispatch_group_t group = dispatch_group_create();

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

// 并行執(zhí)行的線程A

});

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

// 并行執(zhí)行的線程B

});

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

// 匯總結果

});

我們也可以通過用NSOpertion和NSOpertionQueue來處理這個問題

// 創(chuàng)建隊列

NSOperationQueue *queue = [[NSOperationQueue alloc] init];

// 創(chuàng)建3個操作

NSOperation *a = [NSBlockOperation blockOperationWithBlock:^{

NSLog(@”operationA---“);

}];

NSOperation *b = [NSBlockOperation blockOperationWithBlock:^{

NSLog(@”operationB---“);

}];

NSOperation *c = [NSBlockOperation blockOperationWithBlock:^{

NSLog(@”operationC---“);

}];

// 添加依賴

[c addDependency:a];

c在a執(zhí)行完之後再執(zhí)行

[c addDependency:b];

// 執(zhí)行操作

[queue addOperation:a];

[queue addOperation:b];

[queue addOperation:c];

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • NSThread 第一種:通過NSThread的對象方法 NSThread *thread = [[NSThrea...
    攻城獅GG閱讀 946評論 0 3
  • 在這篇文章中,我將為你整理一下 iOS 開發(fā)中幾種多線程方案,以及其使用方法和注意事項。當然也會給出幾種多線程的案...
    張戰(zhàn)威ican閱讀 684評論 0 0
  • 首先明確線程和進程的關系和區(qū)別: 一個程序至少有一個進程,一個進程至少有一個線程. 線程的劃分尺度小于進程,使得多...
    kkj1996閱讀 256評論 0 0
  • 歡迎大家指出文章中需要改正或者需要補充的地方,我會及時更新,非常感謝。 一. 多線程基礎 1. 進程 進程是指在系...
    xx_cc閱讀 7,370評論 11 70
  • 最近幾天的休息情況并不好,幾乎都快到12點入睡,工作是一個原因,更多的是自己對一些無關緊要事情的關注浪費了更多的注...
    小幸甫閱讀 269評論 0 1

友情鏈接更多精彩內容