IOS开发中异步网络请求上实现同步逻辑

 更新时间:2017年03月20日 09:54:48   作者:余成海  
这篇文章主要介绍了IOS开发中异步网络请求上实现同步逻辑的相关资料,需要的朋友可以参考下

IOS开发中异步网络请求上实现同步逻辑

前提:

可能遇到一些问题,比如上传多个数据,需要等多个数据上传成功后做一定的处理,而且一个个上传,万一哪个上传失败了,后面就不需要上传了,直接报错。

之前ASI的网络库中是有同步请求的接口,所以很好处理,AFNetwork的网络库只有异步的网络请求,该怎么实现呢?

1.循环异步拼组

- (void)uploadFile:(NSArray *)imageArray atIndex:(NSInteger)index imagesCount:(NSInteger)count completeBlock:(uploadCompleteBlock)block {
 FNCircleImage *aTCImage = imageArray[index];
 NSString *filepath = aTCImage.localFilePath;
 [self.resourceManager upload:filepath progress:nil completion:^(NSString * _Nullable urlString, NSError * _Nullable error) {
  if (error == nil) {
   aTCImage.remoteUrl = urlString;

   NSInteger idx = index + 1;
   if (idx >= count) {
    block(nil);
   } else {
    [self uploadFile:imageArray atIndex:idx imagesCount:count completeBlock:block];
   }
  } else {
   block(error);
  }
 }];
}

2.信号量异步转同步

__block NSError *e = nil;
[imageArray enumerateObjectsUsingBlock:^(NSString *filePath, NSUInteger idx, BOOL * _Nonnull stop) {
 __block dispatch_semaphore_t t = dispatch_semaphore_create(0);
 [self upload:filepath progress:nil completion:^(NSString * _Nullable urlString, NSError * _Nullable error) {
  if (error == nil) {
   
  } else {
   e = error;
   *stop = YES;
  }
  dispatch_semaphore_signal(t);
 }];
 dispatch_semaphore_wait(t, DISPATCH_TIME_FOREVER);
}];

3.NSOperationQueue可控队列

1).继承NSOperation实现上传逻辑,完成发出通知或者block回调

2).用上传数据创建Operation数组,加入NSOperationQueue中执行

3).根据完成回调的结果和个数判断结果,如果中间有失败,可以关闭未执行的Operation

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • iOS计算上次日期距离现在多久的代码

    iOS计算上次日期距离现在多久的代码

    这篇文章主要为大家详细介绍了iOS计算上次日期距离现在多久的代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • iOS中如何获取某个视图的截图详析

    iOS中如何获取某个视图的截图详析

    这篇文章主要给大家介绍了关于在iOS中如何获取某个视图的截图的相关资料,文中通过示例代码介绍的非常详细,对各位iOS开发者们有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • ios中getTime()的兼容性实例代码

    ios中getTime()的兼容性实例代码

    在本篇文章里小编给大家整理的是关于ios中getTime()的兼容性实例代码,需要的朋友们可以学习下。
    2020-03-03
  • 解决iOS调起微信支付显示系统繁忙问题

    解决iOS调起微信支付显示系统繁忙问题

    这篇文章主要介绍了解决iOS调起微信支付显示系统繁忙问题,需要的朋友可以参考下
    2016-12-12
  • iOS应用中使用Toolbar工具栏方式切换视图的方法详解

    iOS应用中使用Toolbar工具栏方式切换视图的方法详解

    这篇文章主要介绍了iOS应用中使用Toolbar工具栏方式切换视图的方法,文中讲解了UIToolbar的相关编写以及使用xib方式创建可切换视图程序的例子,需要的朋友可以参考下
    2016-04-04
  • IOS中实现图片点击全屏预览

    IOS中实现图片点击全屏预览

    IOS作为一款智能手机系统,在查看图片的时候,如果能够实现全屏,对用户来说有很好的视觉体验,其实实现起来非常的简单,下面我就结合一个简单的代码给大家来分享一下,,需要的朋友可以参考下
    2015-11-11
  • iOS 图片压缩方法的示例代码

    iOS 图片压缩方法的示例代码

    本篇文章主要介绍了iOS 图片压缩方法的示例代码,主要有两种压缩图片的方法,有兴趣的可以了解一下,有兴趣的可以了解一下。
    2017-01-01
  • iOS之UITableView计时器的实现方式总结(NSTimer、DispatchSource、CADisplayLink)

    iOS之UITableView计时器的实现方式总结(NSTimer、DispatchSource、CADisplayLi

    这篇文章主要给大家介绍了关于iOS之UITableView计时器的实现方式,其中包括NSTimer、DispatchSource、CADisplayLink等方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-12-12
  • iOS小组件开发之WidgetKit功能讲解

    iOS小组件开发之WidgetKit功能讲解

    这篇文章主要为大家介绍了iOS小组件开发WidgetKit功能讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • IOS 打包静态库详细介绍

    IOS 打包静态库详细介绍

    这篇文章主要介绍了IOS 打包静态库详细介绍的相关资料,这里对打包静态库做了详细的说明,并进行了总结,需要的朋友可以参考下
    2016-11-11

最新评论