ios 一个界面多个请求处理
来源:互联网 发布:塞曼效应实验报告数据 编辑:程序博客网 时间:2024/06/11 21:57
1.多线程并不好控制,也不会带来提升太多时间。请求直接需要相互依赖的更不好控制。特别是出错了不好找。
2.采用了最普通的数组请求的方式。
控制数组
@property (nonatomic, strong) NSMutableArray *getDateArray; //初始化模型
初始化
self.getDateArray = [NSMutableArray arrayWithArray: @[@"getRouterInfosocketReq",@"getNetworkSettingReq", @"wifiSetG5G2NameAndSegment",@"getAutoUpdateReq"]];
单个请求 注意方法名一定要一致。。。只写两个
- (void)getRouterInfosocketReq{ [req sendSuccess:^(id response) { [self requestSuccess:response andFunction:@"getRouterInfosocketReq"]; } failure:^(NSError *error) { [self routerInfRequestFailure:error]; }];}- (void)getNetworkSettingReq{ [req sendSuccess:^(id response) { [self requestSuccess:response andFunction:@"getNetworkSettingReq"]; } failure:^(NSError *error) { [self routerInfRequestFailure:error]; }];}
最关键代码—
就是通过不断调用getData并获取数组第一项然后调用performSelector方法
- (void)getData{ if (self.getDateArray.count>0) { NSString *getData = self.getDateArray.firstObject;#pragma clang diagnostic push#pragma clang diagnostic ignored "-Warc-performSelector-leaks" [self performSelector:NSSelectorFromString(getData) withObject:nil];#pragma clang diagnostic pop }else { [self refreshUI]; }}
- (void)requestSuccess:(id)response andFunction:(NSString *)functionName{ if ([functionName isEqualToString:@"getRouterInfosocketReq"]) { [self.getDateArray removeObject:@"getRouterInfosocketReq"]; //删除掉已请求部分 if (!self.firstInitModel.autoUpdate) { [self.getDateArray removeObject:@"getAutoUpdateReq"]; //删除掉依赖不需要的请求 } } [self getData];//继续调用
NSSelectorFromString(getData)
这个方法是解决问题的关键。数组只能存储对象,不能存储SEL方法,想要调用方法只能使用performSelector
而NSSelectorFromString(getData) 能够将字符串转成SEL方法
,这种方式不仅仅可以放在请求中,同样可以放在整个页面的方法顺序调用中,一样好用,当一个请求还在进行中,用户进行了刷新操作,只要把数组清空,再次重新初始化,就可以再次重头请求了,非常方便,避免了请求的相互依赖,
#
阅读心得文章中提到了performSelector这个方法的缺点。
1.容易引起内存泄露,ARC不知道方法是否能执行,所以不会进行内存管理。
2.只能传递对象,如果为其他类型必须转为对象。在32位和64位机器中存在问题。
3.使用afterDelay 不好。不如用多线程的等待函数。
#
后续会尝试将这个 变更为GCD
0 0
- ios 一个界面多个请求处理
- 一个servlet处理多个请求
- 一个servlet处理多个请求
- 一个servlet处理多个请求
- iOS 多个网络请求并行/并发处理
- iOS 多个网络请求并行/并发处理
- iOS 多个网络请求并行/并发处理
- iOS 多个网络请求并行/并发处理
- BaseServlet,让一个Servlet可以同时处理多个请求
- 一个servlet处理来自多个不同页面的请求!
- JAVA小工具二:一个请求多个处理
- 在一个Servlet中处理多个请求方法
- struts 一个action处理过个请求
- iOS 通过添加线程依赖和信号量结合实现一个复杂界面请求多个接口时按指定顺序执行
- iOS dispatch group dispatch_group_notify 多线程等待 多个数据请求处理 异步请求
- BaseSelvert处理多个请求
- 一个Action内包含多个请求处理方法的处理
- Struts2一个Action内包含多个请求处理方法的处理
- js事件的捕获和冒泡阶段
- Fire Game
- 条码标签打印软件连接不了数据库怎么办?
- 1.TwoSum
- Android|观察者模式之EventBus
- ios 一个界面多个请求处理
- 判断数字,字母,汉字 String 工具随手记
- 如何用大数据开发套件周期调度机器学习算法
- Javascript 判断客户端是否为 PC 还是手持设备
- 你的大数据安全么?“Hadoop集群遭遇勒索软件攻击 ”
- Ajax Upload上传图片失败的解决方法:
- x86主机搭建家庭智能路由系统 ---- Proxmox虚拟化实现一机多用
- Swift3.0学习笔记-Inheritance(继承)
- SQL常用语句