使用AFNetworking API的NSURLCache图像

时间:2012-10-25 13:04:46

标签: ios image caching afnetworking

我有一个从服务器下载图像的应用程序。图像大约为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网络,则再次获取图像。

2 个答案:

答案 0 :(得分:1)

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

有关缓存的问题在AFNetworking F.A.Q.

中有解释

总之,似乎在iOS上,NSURLCache不提供磁盘缓存功能,即使您使用NSURLCache创建diskCapacity>0(似乎也会被忽略),解决方案是使用NSURLCache的其他一些实现,例如FAQ中建议的SDURLCache

答案 1 :(得分:0)

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