关闭

NSCache和NSURLCache

433人阅读 评论(0) 收藏 举报
分类:

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


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:192538次
    • 积分:3281
    • 等级:
    • 排名:第10767名
    • 原创:50篇
    • 转载:413篇
    • 译文:0篇
    • 评论:2条