转载自崔江涛(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缓存(上)相关推荐

  1. iOS架构设计-URL缓存(下)

    本文转载自崔江涛(KenshinCui) 缓存设计 从前面对于URL Loading System的分析可以看出利用NSURLProtocol或者NSURLCache都可以做客户端缓存,但是NSURL ...

  2. iOS架构设计(一)- MVC

    谈起架构,是个很大很大的词,在开发行业里似乎又是个很虚很虚的词,一般情况下,我都是很少去阐述,更多的是应用到自己平时的工作跟解决问题中 人人都可以谈架构,毕竟谈起来又不需要备案,合适与否,无从可知 架 ...

  3. 视频教程-iOS架构设计与底层开发-iOS

    iOS架构设计与底层开发 毕业于解放军特种作战学院,曾就职广州军区司令部.复原后从事IT行业,涉及逆向,安全,密码学等技术领域.2014年在广州某线下教育机构担任iOS讲师,2015年加入潭州教育集团 ...

  4. iOS架构设计(三)- MVVM

    我是不敢轻易谈MVVM架构设计的 终于在经过前面几篇文章内容的铺垫之后,现在简单说说自己的想法 切记,如果没有kvc kvo的原理知识铺垫,最好去复习一下,否则看过了解,回头就会忘却,不会形成意识 K ...

  5. iOS架构设计-关东升-专题视频课程

    iOS架构设计-3563人已学习 课程介绍         移动平台分层架构设计:大到企业级系统,小到移动设备,我们需要架构设计,因为设计是大道之理,那么分层是将一个系统分成相似技术的模块,这样做的目 ...

  6. iOS架构设计与底层开发-李文瀚-专题视频课程

    iOS架构设计与底层开发-418人已学习 课程介绍         课程内容包括以下:架构设计与底层开发两大知识点 课程收益     通过碎片化学习,熟练掌握架构设计与底层开发,以及最新iOS逆向编程 ...

  7. 万亿级调用下的优雅——微信序列号生成器架构设计及演变(上)

    版权声明:本文由曾钦松原创文章,转载请注明出处:  文章原文链接:https://www.qcloud.com/community/article/200 来源:腾云阁 https://www.qcl ...

  8. Exchange 2016部署实施案例篇-01.架构设计篇(上)

    年前就答应大家要给大家写一个关于Exchange规划部署的文章,一直忙到现在也没有倒出时间来写这个东西.特别是节后,更是开工不利啊,各种奇葩问题,真心无语了.废话就不多说了,开始今天的议题. 相信各位 ...

  9. 高能分享,直击华坤道威(Fuzer)调度系统架构设计专题线上技术讨论沙龙

    从「鲜为人知」的专业名词,到 2006 年的精准定义,再到如今全面上云时代的「百花齐放」,云计算的发展趟过蛮荒之地,已形成极具规模.高可靠性.通用性的服务,而开源是创新的基础,也是这一场技术革命中的重 ...

最新文章

  1. Java在Quant应用_java – 如何绘制quantil band(在R中)
  2. ba+ii+plus模拟+android,财务计算器(BAII PLUS)
  3. [设计模式]迪米特法则
  4. 微小宝公众号排行榜_排行榜 | 山西省高校、高职中专微信公众号周数据排行榜...
  5. [css] 一个项目中有很多无用的css代码,怎么找到并清除这些无用的代码?
  6. Codewars--8kyu解题集
  7. ajax传值controller怎么写,关于ajax请求Controller传值问题详细记录
  8. PartitionAssignor分析
  9. 设置HttpClient的授权标头
  10. 时序数据库技术体系-时序数据存储模型设计
  11. 运用计算机测量单缝衍射光强度分布,衍射光强检测系统、单缝衍射光路系统及光强检测方法与流程...
  12. Ubuntu安装OpenCV4记录
  13. HIVE厂牌艺人_北京音乐节-北京音乐节全攻略 - 马蜂窝
  14. 汽车ESP系统建模及仿真研究(2022-09-20)
  15. 金钱和私有制哪个才是万恶之源?
  16. 滴滴单通道语音分离与目标说话人提取和抑制技术进展
  17. 各linux操作系统查看内核版本命令
  18. Word Vector的综述
  19. LQ0198 圆周率【程序填空】
  20. Spring——IOC底层原理

热门文章

  1. bat+sqlcmd 批量执行脚本
  2. Spring.net使用说明
  3. Debian上网的问题小结
  4. 在别的电脑上运行cg程序出现错误的解决办法
  5. Google工作原理
  6. windows版本下使用xdebug
  7. ASP.NET 2.0数据处理之高级分页/排序
  8. 短信猫GSM Modem
  9. WMI技术介绍和应用——接收事件
  10. 【FFmpeg】函数详解(三)