NSCache和NSURLCache

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不能发起同步请求来请求网络.


阅读更多
个人分类: IOS
上一篇非对称加密算法
下一篇解析AFNetWorking 网络框架(二)
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭