0
点赞
收藏
分享

微信扫一扫

UIWebView的离线缓存

实际上,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加载图片吧~

举报

相关推荐

0 条评论