1.使用信号量进行同步请求
// 创建组
dispatch_group_t group = dispatch_group_create();
// 将第一个网络请求任务添加到组中
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// 创建信号量为0的信号量,目的就是阻塞当前线程
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
// 开始网络请求任务
// 在网络请求任务成功之前,次线程被阻塞,没有返回。
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
});
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// 创建信号量为0的信号量,目的就是阻塞当前线程
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
// 开始网络请求任务
// 在网络请求任务成功之前,次线程被阻塞,没有返回。
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
});
dispatch_group_notify(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"完成了网络请求,不管网络请求失败了还是成功了。");
});
2.报错
1)url带中文
NSString *str = [url stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];