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

相信不少朋友用过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. UTXO Commitment有望彻底解决大区块存储问题
  2. mPaas-WKWebview网络拦截常见问题
  3. 九度OJ 1054:字符串内排序
  4. Mysql远程登录及常用命令
  5. java套接字客户端_使用Java从客户端套接字读取数据(Read data from a client socket in Java)...
  6. 2019年全网首发-vSphere 7之VCSA 7.0 RC部署指南(转载)
  7. 在IDEA集成Github
  8. elastaticresearch 学习过程
  9. boost::filesystem使用手册
  10. 数字化定量分析_数字化驱动下的华夏银行信用卡精细化智能服务
  11. 比神经网络更高级的算法,人工神经网络是算法吗
  12. 网络安全现状及防范措施
  13. 投基取巧:如何通过基金投资获得 20%+ 的收益?基金理财干货分享,附思维导图!
  14. python 词库 匹配_python从一段文本中找出存在于词库的词语
  15. 教你如何注册dll文件
  16. mac电脑如何打开chrome浏览器摄像头?
  17. mapbox-gl绘制经纬网格(Graticule)
  18. 深圳天瑞地安:规范的Java开发让你编程更舒心
  19. 机器学习吴恩达课程总结(五)
  20. 2006年最受瞩目的七大IT技术(转)

热门文章

  1. Android Toast小解
  2. linux返回值含义,linux命令返回值的含义解析
  3. python for mac下载_Python for Mac
  4. selenium 配合多线程_Selenium Webdriver 远程测试和多线程并发测试
  5. 利用python绘制雪景图_用AI绘制冬季雪景森林场景插画图片
  6. 蜗轮蜗杆计算软件_微型直流电机减速比计算方法
  7. Android EditText 常用属性总结
  8. 番茄是水果还是蔬菜这事儿,居然闹到了最高法院?!
  9. JAVA 基础 /第六课: 面向对象 / JAVA中的类和对象
  10. avascript 运动中Offset的bug解决方案