0

这是我打的非常简单的电话:

NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:500];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];
[connection start];

我尝试使用在谷歌上找到的 2 个随机 pdf 网址(搜索“truc 文件类型:pdf”):

A) NSString *urlString = @"http://www.eatletruc.com/letruc.menu0411.pdf";
B) NSString *urlString = @"http://www.botruc.com/boat-specs/C-Truc-7.pdf";

它们都具有相似的标头(在 connection:didReceiveResponse 中使用 allHeaderFields :):

一个)

"Accept-Ranges" = bytes;
Connection = "Keep-Alive";
"Content-Length" = 2641705;
"Content-Type" = "application/pdf";
Date = "Thu, 11 Apr 2013 08:53:39 GMT";
Etag = "\"19a7b55-284f29-4a0a5e94ae1a7\"";
"Keep-Alive" = "timeout=5, max=100";
"Last-Modified" = "Mon, 11 Apr 2011 15:05:50 GMT";
Server = Apache;

二)

"Accept-Ranges" = bytes;
Connection = "Keep-Alive";
"Content-Length" = 343793;
"Content-Type" = "application/pdf";
Date = "Thu, 11 Apr 2013 08:55:38 GMT";
Etag = "\"b6864a-53ef1-49400c1d95800\"";
"Keep-Alive" = "timeout=5, max=100";
"Last-Modified" = "Mon, 01 Nov 2010 17:01:20 GMT";
Server = "Apache/2.2.22 (Unix) mod_ssl/2.2.22 OpenSSL/1.0.0-fips mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635";

但是 connection:willCacheResponse: 只为 url B 调用。我在 Cache.db sqlite 数据库中只找到了 url B。

为什么不缓存 url A?

4

1 回答 1

3

好的,所以问题来自文件的大小。

似乎 NSURLCache 不会缓存大于其磁盘容量 5% 的文件。

我的 NSURLCache 设置了 50MB 的磁盘容量,因此不会缓存大于 2.5MB 的文件。

扩展磁盘容量解决了我的问题。

ps:您可以将磁盘容量扩展到最大2GB,因此缓存中的文件不能大于100MB。

于 2013-04-15T12:05:37.277 回答