一:多線程間通信
多線程之間的通信可以體現(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];