2.delegate效率高,delegate只是保存了一个对象指针3.在多个通信事件的时候,delegate显得直观也易维护。

delegate缺点:1.因方法的声明和实现分离开来,代码的连贯性不是很好,没有 block 好读

2.很多时候需要存储一些临时数据

------------

笔者崇尚于更轻型,更简单,更连贯的代码,所以笔者在封装SJNetwork的时候采用的是Block,佛家云:有所舍,才能有所得。

indulge_in 大神 认为CTNetworking 不足:

使用 IOP 方式建立模块,化继承为组合。独立和等协议作为集约管理部分,若个别接口需要修改这些公共配置,只能在集约管理模块来判断,显得有一点繁琐。

记录了一个 request 实例的所有 task,在 dealloc 中自动取消掉还未降落的网络请求,但是实际上网络请求任务会持有 request,所以自动取消策略不成立了。

YTKNetwork 不足:

基于多态的设计思路,提供了很多供重载的方法,从设计来看,框架是可以实例化YTKBaseRequest子类 直接使用的,那么直接使用时无法重载这些方法专门定制(个人看来有些地方使用属性更灵活);并且,当一个 reqeust 多次start发起请求就会调用多次这些重载方法,可能造成多余计算;

缓存策略使用一个YTKBaseRequest的子类YTKRequest来做,虽然这样看起来比较优雅,父类和子类各司其职,单一职责,但是缓存策略难免会更改父类的逻辑,如此就很难不违背开闭原则。框架的缓存只有一个失效时间控制,笔者想要拓展时发现要改的东西太多。

同一个 request 实例多次 start 调用网络请求时 (多个网络请求并发情况),并未作出实际的处理策略,仅保留最新的NSURLSessionTask,而对旧的未结束的所有NSURLSessionTask丧失了控制权。

网络请求任务强持有所有 request 对象,在弱网环境下可能会有大量 request 对象无法释放,而界面降落点可能不存在了。

CTNetworking

可读性比YTKNetwork好

CTJsbridge已经可以跟CTNetworking交互,H5工程师可以很方便地使用基于CTNetworking的网络API。

各种错误错误类型回调比较全

YTKNetwork

可能是使用了命令模式的原因吧,我觉的YTKNetwork的可读性不如CTNetworking 个人觉的不管用什么设计模式,为的是代码逻辑更加明确,代码更加易懂易读,如有不认同笔者的,请忽略,毕竟人生百味,请允许我有百想,

YTKNetwork和CTNetworking的日志输出,缓冲,取消网络请求,当我们使用的时候还的进行网络的三次封装,笔者认为,一个网络层设计,应该是都封装进去,然后提供开发人员调用就可以了,

SSJNetWork封装缓冲,日志,自动网络请求。

1.缓存处理

缓存处理配置都在SJNetWorkConfig和SJNetworkRequestConfig类中,支持以下配置:- 内存/磁盘存储方式

- 缓存的有效时长

- 根据请求shouldAllIgnoreCache判断是否需要缓存

- 以及直接配置 YYCache

- 支持缓冲最大数量(采用YYCache LRU算法)

- 缓存的版本

2. 自动取消网络请求

采用AOP hook方式自动取消网络请求

swizzling_exchangeMethod([self class],@selector(popViewControllerAnimated:), @selector(ssj_popViewControllerAnimated:));

swizzling_exchangeMethod([self class],@selector(popToRootViewControllerAnimated:), @selector(ssj_popToRootViewControllerAnimated:));

swizzling_exchangeMethod([self class],@selector(popToViewController:animated:), @selector(ssj_popToViewController:animated:));

swizzling_exchangeMethod([self class],@selector(dismissViewControllerAnimated:completion:), @selector(ssj_dismissViewControllerAnimated:completion:));

复制代码

请配置 SJNetworkRequestConfigz 中 className 如不传入参数网络请求对应vc的className,则自动取消网络请求无效

自动取消网络请求根据的的是,视图pop和dismiss的时候取消当前VC下所有的网络请求设计的

3.日志输出,采用NetworkEye部分代码可以监控App内所有HTTP请求并显示请求相关的所有信息,方便App开发的网络调试

SJNetWorkConfig`变量配置,

dubugLogeEnable:请求完成控制台直接输出

SQLLogEnable:记录在sql提高跳转到vc的时候展示

ne_sqlitePassword:log日志数据库密码

ne_saveRequestMaxCount:保存请求的最大个数

ios开发循环网络请求_谈谈 iOS 网络层设计(SSJNetWork封装缓冲,log日志,自动取消网络请求)...相关推荐

  1. App开发日报 2015-05-15 大疆无人机IOS开发之搭建DJI Phantom和iOS视觉平台

    App开发日报 2015-05-15 @好东西传送门 出品, 过刊见 http://app.memect.com 订阅:给 hao@memect.com 发封空信, 标题: 订阅App开发日报 可点击 ...

  2. ios开发循环网络请求_如何简化网络请求接口开发

    日常开发中,需要大量和后端对接接口,很容易写出大量的模板代码,比如把对接口的请求放到组件内,或者虽然有数据访问层,但是有大量 get,post 方法的调用,传参的字符串拼接,异常处理等等,有些逻辑是可 ...

  3. ios开发循环网络请求_iOS开发--HTTP的网络请求状态代码详解

    网络请求是iOS项目的一个大部分,而且大部分的iOS的项目的网络请求是根据AFN进行的二次封装,我们查看返回的结果或者error的网络错误code,从而确认错误类型,针对行的进行调试修改. 说明:一下 ...

  4. ios开发循环网络请求_GitHub - JadenTeng/ResourceX: iOS网络请求,网络泛型编程,工具类的封装,基于AFNetworking 实现, NSCache数据缓存...

    ResourceX 通过AFNetworking.YYModel 解析网络泛型编程简化网络请求 现如今,网络通信几乎涉及每一个app程序.对于绝大多数请求HTTP API的方法,它们的执行流程都可以分 ...

  5. ios 开发 微信分享失败_一个失落的孩子如何在失败的情况下从失败变成了iOS开发人员...

    ios 开发 微信分享失败 by Jordan LaGrone 乔丹·拉格隆(Jordan LaGrone) 一个失落的孩子如何在失败的情况下从失败变成了iOS开发人员 (How a lost kid ...

  6. ios开发语言本地国际化_开发人员软件本地化最终语言指南

    ios开发语言本地国际化 There are lots of great guides out there for how to prep your product for international ...

  7. ios 开发账号 退出协作_如何在iOS 10中的Notes上进行协作

    ios 开发账号 退出协作 iOS' Notes app provides a convenient way to remember the great ideas you come up with ...

  8. 【最火的ios开发技术】常用工具和ios常用开源框架库

    youtube下载神器:https://github.com/rg3/youtube-dl vim插件:https://github.com/Valloric/YouCompleteMe vim插件配 ...

  9. 5个月iOS开发入门总结(C++转行iOS)

    前言:一个人写的ios转行总结,思路很清晰,值得学习 原文网址:http://www.cocoachina.com/bbs/read.php?tid-332587.html 啰嗦(请跳过) 8月5号左 ...

最新文章

  1. 限制Apache日志access.log、error.log文件大小
  2. [Apache] Apache 從 2.2 換至 2.4 httpd.conf 的調整筆記 (windows 環境)
  3. 使用RSA算法解析令牌
  4. leetcode 1818. 绝对差值和
  5. (day 26 - 广度优先搜索 )剑指 Offer 32 - III. 从上到下打印二叉树 III
  6. 第十七章 模型压缩及移动端部署
  7. 0Day发布Confluence 2.1.4 破解,所见即所得的编辑界面终于亮相
  8. matlab实现三角追赶法,矩阵三角分解的追赶法在MATLAB的实现
  9. CefSharp 实现拖拉滑动验证Demo
  10. 用计算机语言写祝福语,有关程序员节的祝福语
  11. 台式计算机显示器发蓝,电脑显示器发蓝怎么办
  12. linux 内存映射-ioremap和mmap函数
  13. 王学岗——————H265实现低延时投屏,从零实现高清无损投屏(对应第六节课)
  14. PL/SQL计算质数
  15. 万向节锁--简单解释
  16. 外媒评出全球32家AI独角兽公司:中国占10家
  17. c++语言小游戏源码,跪求小游戏c++代码
  18. 对抗样本(论文解读八):Towards More Robust Adversarial Attack Against Real World Object Detectors
  19. 反向传播网络(BP-ANN)的python实现
  20. 在keil中看内存地址

热门文章

  1. Karush-Kuhn-Tucker (KKT条件)
  2. Savitzky-Golay 滤波器详解及C/matlab语言程序设计
  3. Delphi指针用法
  4. CRM系统开发经验谈
  5. 程序员的光荣与梦想——论侠客梦的延续与幻灭
  6. 不同寻址方式的灵活应用——改变每个单词首字母大小写
  7. C盘突然爆满怎么办?
  8. 调用函数,整数逆序输出
  9. Python 学习之列表
  10. SpringBoot应用日志通过logstash远程上传到ES