利用信号量实现NSURLSession的同步请求
2017-06-21 09:56
239 查看
苹果从iOS9之后就废弃了拥有同步请求方法的NSURLConnection, 但是block形式的NSURLSession并不能直接实现同步请求.
这里可以通过
这里可以通过
dispatch_semaphore_t信号量来控制线程,来实现NSURLSession的同步请求:
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"请求地址"] cachePolicy:0 timeoutInterval:2.0]; //创建信号量 dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); NSURLSession *session = [NSURLSession sharedSession]; NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { /*处理返回的参数 ...... */ //发送 dispatch_semaphore_signal(semaphore); }]; [task resume]; //等待(阻塞线程) dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
dispatch_semaphore_create会创建一个信号量,该函数需要传递一个信号值,
dispatch_semaphore_signal会使信号值加1,如果信号值的大小等于1,
dispatch_semaphore_wait会使信号值减1,并继续往下走,如果信号值为0,则等待.
相关文章推荐
- NSURLSession 同步请求(使用信号量)
- 使用GCD 信号量来实现iOS 同步网络请求
- 利用NSURLSession实现https请求
- 利用NSURLSession实现https请求
- [置顶] 经典利用信号量实现同步的问题
- 利用操作队列和信号量来实现操作同步
- NSURLSession 同步请求(使用信号量)
- Linux利用信号量实现线程的同步与互斥
- 利用NSURLSession实现https请求
- 线程间的同步----利用信号量来实现
- 利用信号量和PV操作实现进程互斥和同步问题
- 利用数据库复制技术 实现数据同步更新
- 利用数据库复制技术 实现数据同步更新
- 利用oracle高级复制功能实现数据同步的问题
- 利用数据库复制技术实现数据同步更新
- 利用数据库复制技术 实现数据同步更新
- 孙鑫VC学习笔记:第十六讲 (一) 利用事件对象实现线程间的同步
- 利用触发器实现数据同步
- 利用触发器实现数据同步
- VC中利用多线程技术实现线程之间的通信(三)---线程之间的同步