iOS 数据库离线缓存思路和网络层封装
2016-02-02 10:59
465 查看
一直想总结一下关于iOS的离线数据缓存的方面的问题,然后最近也简单的对AFN进行了再次封装,所有想把这两个结合起来写一下。数据展示型的页面做离线缓存可以有更好的用户体验,用户在离线环境下仍然可以获取一些数据,这里的数据缓存首选肯定是SQLite,轻量级,对数据的存储读取相对于其他几种方式有优势,这里对AFN的封装没有涉及太多业务逻辑层面的需求,主要还是对一些方法再次封装方便使用,解除项目对第三方的耦合性,能够简单的快速的更换底层使用的网络请求代码。这篇主要写离线缓存思路,对AFN的封装只做简单的介绍。
关于XLNetworkApi
XLNetworkApi的一些功能和说明:
使用XLNetworkRequest做一些GET、POST、PUT、DELETE请求,与业务逻辑对接部分直接以数组或者字典的形式返回。
以及网络下载、上传文件,以block的形式返回实时的下载、上传进度,上传文件参数通过模型XLFileConfig去存取。
通过继承于XLDataService来将一些数据处理,模型转化封装起来,于业务逻辑对接返回的是对应的模型,减少Controllor处理数据处理逻辑的压力。
自定义一些回调的block
XLNetworkRequest.m部分实现
下载部分代码
上传部分代码
XLDataService.m部分实现
(关键)下面这个方法提供给继承XLDataService的子类重写,将转化为模型的代码写在这里,相似业务的网络数据请求都可以用这个子类去请求数据,直接返回对应的模型数组。
关于离线数据缓存
当用户进入程序的展示页面,有三个情况下可能涉及到数据库存取操作,简单画了个图来理解,思路比较简单,主要是一些存取的细节处理。
进入展示页面
下拉刷新最新数据
上拉加载更多数据
需要注意的是,上拉加载更多的时候,每次从数据库返回一定数量的数据,而不是一次性将数据全部加载,否则会有内存问题,直到数据库中没有更多数据时再发生网络请求,再次将新数据存入数据库。这里存储数据的方式是将服务器返回每组数据的字典归档成二进***为数据库字段直接存储,这样存储在模型属性比较多的情况下更有好处,避免每一个属性作为一个字段,另外增加了一个idStr字段用来判断数据的唯一性,避免重复存储。
首先定义一个工具类XLDataBase来做数据库相关的操作,这里用的是第三方的FMDB。
一些继承于XLDataService的子类的数据库存储和模型转换的逻辑代码
下面是一些控制器的代码实现:
最后附上代码的下载地址,重要的部分代码中都有相应的注释和文字打印,运行程序可以很直观的表现。
https://github.com/ShelinShelin/OffLineCache.git
希望大家能提出一些意见,很乐意与大家互相交流。
关于XLNetworkApi
XLNetworkApi的一些功能和说明:
使用XLNetworkRequest做一些GET、POST、PUT、DELETE请求,与业务逻辑对接部分直接以数组或者字典的形式返回。
以及网络下载、上传文件,以block的形式返回实时的下载、上传进度,上传文件参数通过模型XLFileConfig去存取。
通过继承于XLDataService来将一些数据处理,模型转化封装起来,于业务逻辑对接返回的是对应的模型,减少Controllor处理数据处理逻辑的压力。
自定义一些回调的block
当用户进入程序的展示页面,有三个情况下可能涉及到数据库存取操作,简单画了个图来理解,思路比较简单,主要是一些存取的细节处理。
进入展示页面
下拉刷新最新数据
上拉加载更多数据
需要注意的是,上拉加载更多的时候,每次从数据库返回一定数量的数据,而不是一次性将数据全部加载,否则会有内存问题,直到数据库中没有更多数据时再发生网络请求,再次将新数据存入数据库。这里存储数据的方式是将服务器返回每组数据的字典归档成二进***为数据库字段直接存储,这样存储在模型属性比较多的情况下更有好处,避免每一个属性作为一个字段,另外增加了一个idStr字段用来判断数据的唯一性,避免重复存储。
首先定义一个工具类XLDataBase来做数据库相关的操作,这里用的是第三方的FMDB。
https://github.com/ShelinShelin/OffLineCache.git
希望大家能提出一些意见,很乐意与大家互相交流。
相关文章推荐
- HTTP协议详解
- hdu 3081(并查集+最大流)
- Error:Unable to tunnel through proxy. Proxyreturns "HTTP/1.1 400 Bad Request"
- 巧用LoRa无线网络 远距离采集温湿度
- 封装原生ajax
- http://www.oschina.net/code/snippet_2507499_53892
- HTTP协议头部与Keep-Alive模式详解
- Http 请求中Content -Type 讲解以及在Spring MVC 中的应用
- OK335xS 网络连接打印信息 hacking
- 第五章 采用SVM和神经网络的车牌识别
- IOS-网络(NSURLSession)
- Android OkHttp完全解析 是时候来了解OkHttp了
- HTTP状态码
- 基于libsmart的网络编程示例之EchoServer
- nginx使用ssl模块配置HTTPS支持
- http的方式访问HDFS
- 在 JS 中使用 fetch 更加高效地进行网络请求
- HTTP协议—— 简单认识TCP/IP协议
- HttpClient使用笔记
- HTTP2.0那些事