本博客的原则是:不发则已,要发就发牛逼的。不指望上推荐,只希望发些精髓的东西,与业界的朋友共同成长。

相信不少朋友用过UIWebView,webView下载的图片一般比较大,这个要能缓存就好了,可以大幅度提高加载速度,同时为用户节省流量。本文就是讲如何完美解决webView缓存的问题。

实际上,UIWebView自己是有缓存的,但容量有限,清理时间我们也不好掌握,那它是用什么做的缓存呢?是NSURLCache。看到它有几个方法:

+ (void)setSharedURLCache:(NSURLCache *)cache;

- (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request;

- (void)storeCachedResponse:(NSCachedURLResponse *)cachedResponse forRequest:(NSURLRequest *)request;

太好了,我们只要写一个子类继承NSURLCache,实现后两个方法,再让这个子类对象成为sharedURLCache,就可以操控webView的请求和缓存了。抛个砖吧:

- (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request {NSString *pathString = [[request URL] absoluteString];if (![pathString hasSuffix:@".jpg"]) {return [super cachedResponseForRequest:request];}if ([[MYURLCache sharedCache] hasDataForURL:pathString]) {NSData *data = [[MYURLCache sharedCache] dataForURL:pathString];NSURLResponse *response = [[[NSURLResponse alloc] initWithURL:[request URL]MIMEType:@"image/jpg"expectedContentLength:[data length]textEncodingName:nil] autorelease];return [[[NSCachedURLResponse alloc] initWithResponse:response data:data] autorelease];        }return [super cachedResponseForRequest:request];
}- (void)storeCachedResponse:(NSCachedURLResponse *)cachedResponse forRequest:(NSURLRequest *)request {NSString *pathString = [[request URL] absoluteString];if (![pathString hasSuffix:@".jpg"]) {[super storeCachedResponse:cachedResponse forRequest:request];return;}[[MYURLCache sharedCache] storeData:cachedResponse.data forURL:pathString];
}

上面的代码是专门用来搞定webView中的jpg图片的,其中MYURLCache提供了把data读、写入文件的功能,这个不是本文的重点,请各位自己实现吧。

在程序启动的时候,加入以下代码:

MYURLCache *cache = [[MYURLCache alloc] init];
[NSURLCache setSharedURLCache:cache];

OK,搞定了,试试webView加载图片吧~

转载于:https://www.cnblogs.com/sany007/archive/2013/02/22/2922816.html

UIWebView的离线缓存相关推荐

  1. 使用NSURLProtocol实现UIWebView的离线缓存的简单实现

    文章介绍了使用NSURLProtocol实现UIWebView的离线缓存的简单实现,你可以在github上下载这个demo的代码. 无论是"MKNetworkKit"还是" ...

  2. 使用NSURLProtocol实现UIWebView的离线缓存

    https://github.com/rnapier/RNCachingURLProtocol 转载于:https://www.cnblogs.com/spiderdzl/p/5207459.html

  3. iOS原生App与H5页面交互 离线缓存 笔记

    //webview每次加载之前都会调用这个方法,利用该代理方法截取JS的href来调用原生的方法- (BOOL)webView:(UIWebView*)webView shouldStartLoadW ...

  4. 关于域用户的离线缓存登录知识分享

    关于域用户的离线缓存登录知识分享 微软设计缓存登录的目的? 缓存登录主要是为了解决当公司域控制器发生故障联系不上DC或用户拿笔记本电脑回家不拔×××的情况下,依然能够登录到系统,进行办公.如果用户登录 ...

  5. 离线缓存占内存吗_彻底弄懂浏览器缓存策略

    浏览器缓存策略对于前端开发同学来说不陌生,大家都有一定的了解,但如果没有系统的归纳总结,可能三言两语很难说明白,甚至说错,尤其在面试过程中感触颇深,很多候选人对这类基础知识竟然都是一知半解,说出几个概 ...

  6. html开启页面离线缓存,HTML5 离线缓存

    离线缓存 applicationCache 第一次加载后将数据缓存,如果没有清除缓存,下一次没有网络也能加载. 使用 1. 使用 manifest 属性,引入 .appcache 文件 每个指定了 m ...

  7. html5 客户端数据缓存机制,深入理解HTML5离线缓存机制

    TML5提供了一种离线应用缓存机制,使得网页应用可以离线使用,这种机制在移动端浏览器上支持度非常广,所有版本的android和ios浏览器都能很好的支持.我们可以放心的使用该特性来加速移动端页面的访问 ...

  8. javascript中本地储存、离线缓存、地理定位、网络状态

    本地储存: 实际开发中某些内容是不需要放到服务器中,而是放到了浏览器中,需要的时候可以快速的访问,甚至页面刷新也可能不会丢失数据,容量较大:这里介绍两种数据存储方式:sessionStorage约5M ...

  9. 使用 jQuery Mobile 与 HTML5 开发 Web App (十七) —— HTML5 离线缓存

    本文要介绍的,是 HTML5 离线网络应用程序的特性,离线网络应用程序在 W3C 中的实际名称是 "Offline Web applications" ,也称离线缓存.当用户打开浏 ...

  10. HTML离线缓存( applicationCache)

    什么离线缓存作用 着移动互联网的兴起,设备终端的位置不在固定.而移动设备非常依赖无线信号,网络的可靠性并不稳定,比如在过隧道或是信号强度弱的地方,无法访问网站,这无疑对用户体验是不好的,所以HTML5 ...

最新文章

  1. struts2教程--标签库详解
  2. 花神的数论题(这题...哎。数位dp咋就这么 not naive 呢)
  3. 万亿条数据查询如何做到毫秒级响应?
  4. linux的shell脚本语法与C语言不同之一
  5. Linux文件操作实用笔记
  6. OpenGL:freeglut ERROR: Function <glutCreateWindow> called without first calling ‘glutInit‘.
  7. Key-Value Coding (KVC)
  8. 携手英特尔,百度开放云将提供更强悍云服务
  9. 浅谈我的UI设计之路
  10. Cannot resolve plugin org.apache.maven.plugins:xxxx
  11. 在linux中重启网络服务的命令,linux重启网络命令
  12. NXP恩智浦单片机Keil5环境下编程
  13. 草稿cfmm~yuyu 22.9.26 Linux
  14. 运行maven生成的jar包显示class “XXX“ not found
  15. 【学习笔记】阿里天猫浏览型应用的CDN静态化架构演变
  16. 20180826 猿题库笔试题
  17. 民间秘术——可怕的死亡诅咒
  18. js中call 的使用, call方法的继承
  19. Lecture4 反向传播(Back Propagation)
  20. 图文笔记,带你走进《未来简史》(26-30)

热门文章

  1. linux中移动光标的命令,linux命令行中常用光标移动快捷键
  2. 数据结构和算法liuyubobo_C++,java算法与数据结构-某课网价值166元实战教程
  3. 《高翔视觉slam十四讲》学习笔记 第六讲 非线性优化
  4. 如何给自己的电脑硬盘分区
  5. No pubspec.yaml file found. This command should be run from the root of your Flutter project. Do not
  6. Web—sublime安装包、自动生成代码、使用Emmet插件快速编写CSS样式、emmet(快速开发)的使用
  7. P3986 斐波那契数列
  8. Snort里如何将一个tcpdump格式的二进制文件读取打印到屏幕上(图文详解)
  9. virtualbox中实施ASM扩容实施记录
  10. kernighan lin算法