多线程的应用场景

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;

//打印查看当前线程

NSLog(@“刷新UI—%@”,[NSThreadcurrentThread]);

});

});

信号量和group结合解决多个请求回来才更新ui

//网络请求都成功才更新UI

dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);

//创建全局并行

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, ^{

   //加载订单消息数据

   [[HCViewModel sharedViewModel] loadMessageWithPara:@"1" and:^(NSMutableArray *magerAddressArr) {

       dispatch_semaphore_signal(semaphore);

       self.orderMessagelistArr = magerAddressArr;

   } and:^(NSError *error) {

       //请求错误回调

       [self hc_failRequestWitherror:error];

   }];

});

dispatch_group_async(group, queue, ^{

   [[HCViewModel sharedViewModel] loadMessageWithPara:@"2" and:^(NSMutableArray *magerAddressArr) {

       dispatch_semaphore_signal(semaphore);

       //加载系统消息数据

       self.systemMessagelistArr = magerAddressArr;

   } and:^(NSError *error) {

       //请求错误回调

       [self hc_failRequestWitherror:error];

   }];

});

dispatch_group_notify(group, queue, ^{

   //2个请求对应四次信号等待

   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];

   });

});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值