【发布时间】:2014-01-27 17:32:54
【问题描述】:
我在我的应用委托中初始化了 NSURLCache,如下所示:
int cacheSizeMemory = 4*1024*1024; // 4MB
int cacheSizeDisk = 32*1024*1024; // 32MB
MyServerCache *sharedCache = [[MyServerCache alloc] initWithMemoryCapacity:cacheSizeMemory diskCapacity:cacheSizeDisk diskPath:@"nsurlcache"];
[MyServerCache setSharedURLCache:sharedCache];
然后我使用默认缓存策略创建一个请求并调用:
[NSURLConnection sendSynchronousRequest: urlRequest
returningResponse: &response
error: pError ];
响应的类型为“application/json”,并且“Cache-Control”设置为“private, max-age=600”。响应只有 874 字节(不应该太大而无法缓存),但是 NSURLCache 似乎不起作用。
我已经在模拟器上运行它并寻找似乎不存在的磁盘缓存,因此我将 NSURLCache (MyServerCache) 子类化并覆盖以下方法以查看它们是否被调用:
-(NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request
{
NSLog(@"Returning cached response for request: %@", request);
return [super cachedResponseForRequest:request];
}
-(void)storeCachedResponse:(NSCachedURLResponse *)cachedResponse forRequest:(NSURLRequest *)request
{
NSLog(@"Caching response for request: %@", request);
[super storeCachedResponse:cachedResponse forRequest:request];
}
无论我做什么(我已经尝试了几种不同的 API 和响应),NSURLCache 似乎永远不会缓存任何东西。我永远无法在文件系统中找到磁盘缓存,并且从未在我的 NSURLCache (MyServerCache) 子类上调用上述方法。
我真的很想使用它而不是滚动自己的缓存,但我不知道为什么它不工作或如何让它工作。请帮忙。
【问题讨论】:
-
什么是UVMServerCache?为什么不用 NSURLCache 而不是这个类呢?
-
它是 NSURLCache 的一个子类,在这里我只重写了上面提到的方法。我这样做是为了能够知道它是否真的在尝试缓存响应和/或返回缓存的响应。因为我在 NSURLConnection 上使用了一个类方法,所以我无法实现它的委托方法来尝试在那里拦截......所以子类化 NSURLCache 似乎是唯一的其他选择......
-
您是否尝试使用标准类而不是自定义类?仅供测试,也许你会在这之后找到一些磁盘缓存?
-
我先试过了。当这不起作用时,我进行子类化以更好地了解实际发生的情况。
-
@HackyStack 你有没有想过这个问题?我正在使用 iOS7 的 NSURLSession 类(使用 NSURLCache)做类似的事情。 stackoverflow.com/questions/21957378/…
标签: ios objective-c nsurlconnection nsurlrequest nsurlcache