1

我有一个从服务器下载图像的应用程序。图片大约 56 KB,至少有 30 张。有时用户要么没有连接,要么没有边缘连接(拨号)。

我在我的 AppDelegate.h 中使用 NSURLCache,如下所示:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {   
    int cacheSizeMemory = 4*1024*1024; // 4MB
    int cacheSizeDisk = 32*1024*1024; // 32MB
    NSURLCache *sharedCache = [[[NSURLCache alloc] initWithMemoryCapacity:cacheSizeMemory diskCapacity:cacheSizeDisk diskPath:@"nsurlcache"] autorelease];
    [NSURLCache setSharedURLCache:sharedCache]; 

但由于某种原因,它不会缓存图像。如果我加载所有可用互联网连接的图像,然后断开连接或使用 Edge 网络,它会再次获取图像。

4

2 回答 2

1

编辑:如果您使用 NSURLRequest 的 NSURLRequestReturnCacheDataElseLoad cachePolicy 或返回适当的 Cache-Control 标头,iOS 5 及更高版本支持磁盘缓存。

这个关于缓存的问题在AFNetworking FAQ中有解释。

总而言之,似乎在 iOS 上,NSURLCache不提供磁盘缓存功能,即使您创建一个NSURLCachewith a diskCapacity>0(似乎被忽略),解决方案是使用一些其他实现,NSURLCacheSDURLCache常见问题解答中建议的。

于 2012-10-25T13:15:04.547 回答
0

您需要访问服务器以确保它为每个请求发送回缓存控制标头,以便 NSURLCache 可以使用。如果您没有或无法获得该设置(如在我的场景中),您将需要滚动自己的缓存层或使用 SDURLCache 或 RNCachingURLProtocol 之类的东西。

于 2013-03-12T17:47:54.337 回答