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