NSCache和NSURLCache
2013-05-07 16:33 三戒1993 阅读(131) 评论(0) 编辑 收藏 举报
(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
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不能发起同步请求来请求网络.