iOS架构设计-URL缓存(上)
来源:互联网 发布:旅游市场调查数据 编辑:程序博客网 时间:2024/06/06 09:32
转载自崔江涛(KenshinCui)
http://www.cnblogs.com/kenshincui/p/iOS-jia-gou-she-jiURL-huan-cun.html
概览
缓存组件应该说是每个客户端程序必备的核心组件,试想对于每个界面的访问都必须重新请求势必降低用户体验。但是如何处理客户端缓存貌似并没有统一的解决方案,多数开发者选择自行创建数据库直接将服务器端请求的JSON(或Model)缓存起来,下次请求则查询数据库检查缓存是否存在;另外还有些开发者会选择以归档文件的方式保存缓存数据,每次请求资源之前检查相应的缓存文件。事实上iOS系统自身就提供了一套缓存机制,本文将结合URL Loading System介绍一下如何利用系统自身缓存设计来实现一套缓存机制,使用这套缓存设计你无需自己编写内存和磁盘存储,无需自行检查缓存过期策略就能轻松实现数据缓存。
URL Loading System
URL Loading System是类和协议的集合,使用URL Loading System iOS系统和服务器端进行网络交互。URL作为其中的核心,能够让app和资源进行轻松的交互。为了增强URL的功能Foundation提供了丰富的类集合,能够让你根据地址加载资源、上传资源到服务器、管理cookie、控制响应缓存(这也是我们今天的重点内容)、处理证书和认证、扩展用户协议(后面也会提到相关内容)等,因此URL缓存之前熟悉URL Loading System是必要的。下图一系列集合的关系:
本文代码一律使用Swift编写,但是鉴于很多朋友接触URL Loading System都是从Objective-C开始,所以文章中文字部分还是采用OC命名,其区别不大,主要是少了NS前缀。
NSURLProtocol
URL Loading System默认支持http、https、ftp、file和data 协议,但是它同样也支持你注册自己的类来支持更多应用层网络协议,当然你也可以指定其他属性到URL reqeust和URL response上。具体而言NSURLProtocl可以实现以下需求(包含但不限):
重定向网络请求(或进行域名转化、拦截等,例如:netfox)
忽略某些请求,使用本地缓存数据
自定义网络请求的返回结果 (比如:GYHttpMocking)
进行网络全局配置
NSURLProtocol类似中间人设计,将网络求细节提供给开发者,而又以一种优雅的方式暴漏出来。NSURLProtocol的定义更像是一个URL协议,尽管它继承自NSObject却不能直接使用,使用时自定义协议继承NSURLProtocol,然后在app启动时注册即可,这样一来所有请求细节开发者只需要在自己的类中控制即可(这个设计确实完美
- iOS架构设计-URL缓存(上)
- iOS架构设计-URL缓存(下)
- iOS架构设计-URL缓存(下)
- 高性能网站架构设计之缓存篇(5)- Redis 集群(上)
- 高性能网站架构设计之缓存篇(4)- Redis 集群(上)
- 缓存架构设计二三事
- 0907期《程序员》架构栏目文章《关于大规模系统缓存设计的一些考虑(上)》示例代码
- 架构设计之分布式缓存
- 架构设计之分布式缓存
- 缓存架构设计的几个问题
- 缓存架构设计细节二三事
- 缓存架构设计细节二三事
- 缓存架构设计细节二三事
- 缓存架构设计细节二三事
- 缓存架构设计细节二三事
- 缓存架构设计细节二三事
- iOS离线缓存架构设计方案
- js url上添加随机数防止缓存
- 数据仓库学习笔记1
- 做出一段数据的概率分布和概率密度?
- Glide图片加载库的使用
- C++中的virtual关键字---补充(1)《Effective C++》
- iOS CI 自动生成IPA
- iOS架构设计-URL缓存(上)
- 数组和切片作为函参传递的不同
- 四.SpringBoot集成实例系列-注解型多数据源mybatis
- java程序性能优化之设计优化--设计模式:单例模式(1)
- 安装单个Nginx
- Java是传值还是传引用
- 前后端交互项目总结
- ArcMap坐标转换及投影详解
- 在HTML中使用Javascript (第二章)