NSCache和NSURLCache

转载 2013年12月04日 09:55:43

NSCache 
(1)可以存储(当然是使用内存)
(2)保持强应用, 无视垃圾回收. =>这一点同 NSMutableDictionary
(3)有固定客户.



+---------------------------+------------------------------+
|        NSCache            |      NSMutableDictionary     |
+---------------------------+------------------------------+
|   NSDiscardableContent    |          NSObject            |
+---------------------------+------------------------------+


下面是 UIImageView+AFNetworking的使用:


@interface AFImageCache :NSCache

- (UIImage *)cachedImageForRequest:(NSURLRequest *)request;

- (void)cacheImage:(UIImage *)image

        forRequest:(NSURLRequest *)request;

@end



NSURLCache 


iOS5 之前是不能通过NSURLCache使用硬盘缓存的,所以有SDURLCache这样的library来实现硬盘缓存. iOS5可以使用NSURLCache的硬盘缓存, 只要符合http-cache-control-header即可.

这里有详细的说明:here 

这也就是说不用做任何操作, 系统将自动完成满足缓存条件的request.




映射关系:
+---------------------------+---------------------------------+
|        NSURLRequest   ----|---->      NSCachedURLResponse   |
+---------------------------+---------------------------------+


通过这样的映射关系实现缓存. 这里存的是NSCachedURLResponse. 也就是说这里的NSURLCache也是一个类似于NSCache的容器.
只不过data是NSCachedURLResponse对象. 并不是类似于image这样的data.


这篇文章可以的: 

NSURLCache使用心得here

我测试了一下UIImage->NSData->URL,NSURLConnection, UIWebView不同时候调用 

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

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

的情况:

+-------------+---------------------+----------------------+------------------+
|             |     UIImage->URL    |   NSURLConnection    |    UIWebView     |
+---------+---+---------------------+----------------------+------------------+
|         | c |         X           |     first called     |    first called  |                                               
|1’s time |---+---------------------+----------------------+------------------+
|         | s |     first called    |     second called    |   second called  |                                     
+---------+---+---------------------+----------------------+------------------+
|         | c |         X           |     first called     |    first called  |                         
|2’s time +---+---------------------+----------------------+------------------+
|         | s |     first called    |         X            |         X        |                           
+---------+---+---------------------+----------------------+------------------+


注: 

c 表示 cachedResponseForRequest

s 表示 storeCachedResponse

X 表示不被调用

结果显示:  UIImage->URL 是同步的请求.   因为cachedResponseForRequest不能发起同步请求来请求网络.


相关文章推荐

NSCache和NSURLCache网络缓存优化

首先要说一件重要的事: NSCache和NSURLCache一点关系也没有 NSCache和NSURLCache一点关系也没有 NSCache和NSURLCache一点关系也没有 ...

利用NSCache提升效率

利用NSCache提升效率

iOS开发之缓存框架、内存缓存、磁盘缓存、NSCache、TMMemoryCache、PINMemoryCache、YYMemoryCache、TMDiskCache、PINDiskCache

1.在项目中我们难免会用到一些缓存方式来保存服务器传过来的数据,以减少服务器的压力。 缓存的方式分为两种分别为内存缓存和磁盘缓存,内存缓存速度快容量小,磁盘缓存容量大速度慢可持久化。常见的内存缓存有N...

用NSURLCache解决UIWebView请求远程资源慢的问题

正常情况下当你需要写一个具备网络连接的iOS程序,你会想要一个本地的iOS接口能够接收网络上的所有数据。然而,在项目中总是有一些限制你可以实现的东西,而且有时候你可能想要为用户显示一个规整的页面。 ...

76.iOS 网络缓存(NSURLCache/NSCachedURLResponse)

iOS 中的一些缓存包括NSURLCache/NSCachedURLResponse,以及NSURLRequestCachePolicy 缓存策略...

Objective-c下具有下载功能的NSURLCache类CustomURLCache

iOS自定义URL Cache类,实现自定义下载功能。

数据缓存NSURLCache

转自:http://www.cnblogs.com/wendingding/p/3950198.html OS开发网络篇—数据缓存 一、关于同一个URL的多次请求   有时候,对同一个URL请求...

NSURLCache

转载自:NSURLCacheNSURLCache 为您的应用的 URL 请求提供了内存中以及磁盘上的综合缓存机制。 作为基础类库 URL 加载系统 的一部分,任何通过 NSURLConnection ...

NSCache

可怜的 NSCache 一直处于 NSMutableDictionary 的阴影之下。就好像没有人知道它提供了垃圾处理的功能,而开发者们却费劲力气地去自己实现它。 没错,NSCache 基本上就是一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:NSCache和NSURLCache
举报原因:
原因补充:

(最多只允许输入30个字)