1

我在本地缓存了 UIWebView 所需的一些较大的文件,并且有一个 NSURLCache 的子类和一个自定义实现来帮助服务这些文件。

- (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request

我正在使用它来劫持请求并返回本地存储的文件副本(主要是 t

cachedResponseForRequest:request 的主体(没有样板)本质上是:

// logic to figure out what the local file is, load it into a NSData object (f)
NSURLResponse *r = [[NSHTTPURLResponse alloc] initWithURL:request.URL MIMEType:mimetype expectedContentLength:[f length] textEncodingName:nil];
NSCachedURLResponse *cr = [[NSCachedURLResponse alloc] initWithResponse:r data:f] ;
[super storeCachedResponse:cr forRequest:request];
return cr;

这适用于除单个 svg 图像之外的所有缓存内容。当尝试加载 svg 图像时,它将通过 cachedResponseForRequest:request 进行,构建一个 NSCachedURLResponse 对象并返回它。

然而,应用程序要做的下一件事是从远程服务器下载文件,然后从缓存中提供任何后续请求。我们不想远程下载文件,因为它比较大并且影响性能。

NSURLCache 处理 .svg 文件是否与其他文件类型不同?

4

1 回答 1

0

初始化缓存时,NSUrlCache 将处理的文件的最大大小可能会受到参数的影响:

initWithMemoryCapacity:(NSUInteger)memoryCapacity diskCapacity:(NSUInteger)diskCapacity diskPath:(NSString *)diskPath

最大文件大小与内存容量有关。您应该将其设置为您要处理的最大文件大小的至少 10 倍(为什么?)。

我已经使用https://github.com/evermeer/EVURLCache对最大 15MB 的文件进行了尝试

于 2013-02-28T07:12:56.073 回答