我正在创建一个需要从远程API获取大量信息的iOS应用。有很多http请求可以完全缓存,但似乎NSURLConnection
没有足够的缓存:每次我杀死应用程序并再次启动它,所有请求都会再次发出,而不是来从缓存(iOS 5 应该使用磁盘缓存)。如果我第二次(在应用程序生命周期内)发出相同的请求,它确实来自缓存。
我正在使用NSURLRequestReturnCacheDataElseLoad
策略,并且http服务器上的缓存控制标头已设置,因此可以缓存所有内容。
所以问题是每次应用启动时都会再次发出所有请求。为什么这不是来自磁盘?
修改:似乎此问题仅在网址中有查询时才存在。例如,当我请求http://www.apple.com/时,一切都很好,在新的应用程序启动时,实际上没有请求。当我更改为http://www.apple.com/?test时,始终会发出第一个请求。
修改2 :看起来像TTURLRequest
(三部分的一部分20)和SDURLCache
是解决方案。
答案 0 :(得分:1)
回答我自己的问题:
解决方案是将SDURLCache添加到您的项目中,然后将此代码添加到您的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
方法中:
SDURLCache *URLCache = [[SDURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024 diskCapacity:24 * 1024 * 1024 diskPath:[SDURLCache defaultCachePath]];
[NSURLCache setSharedURLCache:URLCache];
这对缓存更具攻击性,包括带查询的网址。