2012-10-25 115 views
1

我有一个应用程序正在从服务器上下载图像。图像大约56 KB,至少有30个。有时用户没有连接或边缘连接(拨号)。NSURLCache图像使用AFNetworking API

我使用NSURLCache在我AppDelegate.h这样的:

- (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网络,它将再次获取图像。

+0

可能无法解决您的问题,但是:您是否知道AFNetworking在UIImageView上提供了一个类别,使其能够轻松加载远程图像(包括缓存!)? http://engineering.gowalla.com/AFNetworking/Categories/UIImageView(AFNetworking).html –

+0

是!我已经在使用该类别,但在边缘网络(这是我得到的嘿嘿),它是超级慢。 – azamsharp

+0

也许,您应该提供一些关于如何加载/缓存图像的更多细节(代码)。 –

回答

1

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

这个关于缓存的问题在AFNetworking F.A.Q.中有解释。

总之,似乎在iOS上,NSURLCache不提供磁盘缓存功能,即使你创建一个diskCapacity>0(它似乎被忽略)的NSURLCache,解决的办法是使用一些其他实施NSURLCache像常见问题中建议的SDURLCache

+0

有趣,谢谢! –

+7

实际上,与iOS 5不同的是,具有NSURLCache的iOS 5实际上将缓存存储在磁盘上。你可以在你的库文件夹中检查它是否存在缓存文件夹,并在缓存中找到缓存名称。 – azamsharp

+0

@azamsharp是的,谢谢你的精度。我也在iOS5上读到了这个错误修正,但忘了它;)(但假设OP有磁盘缓存的问题,也许他仍然在iOS4中测试它的应用程序?)_ – AliSoftware

0

您需要访问服务器以确保它为每个NSURLCache请求都发回缓存控制标头以供任何使用。如果您没有或无法获得该设置(就像在我的场景中那样),您需要推出自己的缓存层或使用SDURLCache或RNCachingURLProtocol之类的东西。