IOS开发中异步网络请求上实现同步逻辑
发布时间 - 2026-01-11 00:15:36 点击率:次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利用AVPlayer播放网络音乐的方法教程
# 详解iOS中多个网络请求的同步问题总结
# Vue.js教程之axios与网络传输的学习实践
# iOS中设置网络超时时间+模拟的方法详解
# iOS socket网络编程实例详解
# IOS 出现问题POST网络请求状态code:500的解决方法
# iOS判断网络请求超时的方法
# IOS 网络请求中设置cookie
# 上传
# 多个
# 回调
# 信号量
# 很好
# 是有
# 就不
# 希望能
# 报错
# 该怎么
# 谢谢大家
# 传了
# 库中
# 失败了
# index
# atIndex
# NSInteger
# NSArray
# imageArray
# uploadCompleteBlock
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
实例解析angularjs的filter过滤器
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
Android Socket接口实现即时通讯实例代码
微信小程序 canvas开发实例及注意事项
如何快速启动建站代理加盟业务?
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
如何在阿里云高效完成企业建站全流程?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤
香港服务器网站推广:SEO优化与外贸独立站搭建策略
Python文本处理实践_日志清洗解析【指导】
如何快速查询网址的建站时间与历史轨迹?
ChatGPT 4.0官网入口地址 ChatGPT在线体验官网
EditPlus中的正则表达式 实战(1)
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
在线制作视频的网站有哪些,电脑如何制作视频短片?
悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤
用yum安装MySQLdb模块的步骤方法
Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】
黑客如何利用漏洞与弱口令入侵网站服务器?
如何解决hover在ie6中的兼容性问题
网站制作大概多少钱一个,做一个平台网站大概多少钱?
微信公众帐号开发教程之图文消息全攻略
iOS中将个别页面强制横屏其他页面竖屏
Android okhttputils现在进度显示实例代码
Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】
如何用JavaScript实现文本编辑器_光标和选区怎么处理
Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】
如何在阿里云虚拟主机上快速搭建个人网站?
音乐网站服务器如何优化API响应速度?
如何在腾讯云服务器上快速搭建个人网站?
大连 网站制作,大连天途有线官网?
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
如何快速搭建支持数据库操作的智能建站平台?
如何选择PHP开源工具快速搭建网站?
油猴 教程,油猴搜脚本为什么会网页无法显示?
移动端脚本框架Hammer.js
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
网站图片在线制作软件,怎么在图片上做链接?
Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】
UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】
如何基于PHP生成高效IDC网络公司建站源码?
canvas 画布在主流浏览器中的尺寸限制详细介绍
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】

