GCD線程間通信
//0.獲取一個全局的隊列
dispatch_queue_tqueue?=?dispatch_get_global_queue(0,0);
//1.先開啟一個線程堤瘤,把下載圖片的操作放在子線程中處理
dispatch_async(queue,?^{
//2.下載圖片
NSURL*url?=?[NSURLURLWithString:@"http://h.hiphotos.baidu.com/zhidao/pic/item/6a63f6246b600c3320b14bb3184c510fd8f9a185.jpg"];
NSData*data?=?[NSDatadataWithContentsOfURL:url];
UIImage*image?=?[UIImageimageWithData:data];
NSLog(@"下載操作所在的線程--%@",[NSThreadcurrentThread]);
//3.回到主線程刷新UI
dispatch_async(dispatch_get_main_queue(),?^{
self.imageView.image=?image;
//打印查看當(dāng)前線程
NSLog(@"刷新UI---%@",[NSThreadcurrentThread]);
});
});
信號量和group結(jié)合解決多個請求回來才更新ui
//網(wǎng)絡(luò)請求都成功才更新UI
?? dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
?? //創(chuàng)建全局并行
?? dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
?? dispatch_group_t group = dispatch_group_create();
?? dispatch_group_async(group, queue, ^{
?? ? ? //加載訂單消息數(shù)據(jù)
?? ? ? [[HCViewModel sharedViewModel] loadMessageWithPara:@"1" and:^(NSMutableArray *magerAddressArr) {
?? ? ? ? ? dispatch_semaphore_signal(semaphore);
?? ? ? ? ? self.orderMessagelistArr = magerAddressArr;
?? ? ? } and:^(NSError *error) {
?? ? ? ? ? //請求錯誤回調(diào)
?? ? ? ? ? [self hc_failRequestWitherror:error];
?? ? ? }];
?? });
?? dispatch_group_async(group, queue, ^{
?? ? ? [[HCViewModel sharedViewModel] loadMessageWithPara:@"2" and:^(NSMutableArray *magerAddressArr) {
?? ? ? ? ? dispatch_semaphore_signal(semaphore);
?? ? ? ? ? //加載系統(tǒng)消息數(shù)據(jù)
?? ? ? ? ? self.systemMessagelistArr = magerAddressArr;
?? ? ? } and:^(NSError *error) {
?? ? ? ? ? //請求錯誤回調(diào)
?? ? ? ? ? [self hc_failRequestWitherror:error];
?? ? ? }];
?? });
?? dispatch_group_notify(group, queue, ^{
?? ? ? //2個請求對應(yīng)四次信號等待
?? ? ? dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
?? ? ? dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
?? ? ? dispatch_async(dispatch_get_main_queue(), ^{
?? ? ? ? ? //更新UI操作
?? ? ? ? ? self.dataList = [NSMutableArray arrayWithObjects:@1,@2, nil];
?? ? ? ? ? [self.tableView reloadData];
?? ? ? });
?? });