1

我正在创建一个需要从远程 API 获取大量信息的 iOS 应用程序。有很多 http 请求可以完美缓存,但似乎NSURLConnection缓存不够积极:每次我杀死应用程序并重新启动它时,所有请求都会再次发出,而不是来自缓存(iOS 5应该使用磁盘缓存)。如果我第二次(在应用程序生命周期内)发出相同的请求,它确实来自缓存。

我正在使用该NSURLRequestReturnCacheDataElseLoad策略,并且设置了 http 服务器上的缓存控制标头,因此可以缓存所有内容。

所以问题是每次应用程序启动时都会再次发出所有请求。为什么这不是来自磁盘?

编辑:似乎这个问题只存在于 url 中有查询时。例如,当我请求http://www.apple.com/时,一切都很好,在新的应用程序启动时,实际上没有发出任何请求。当我更改为http://www.apple.com/?test时,总是会发出第一个请求。

编辑2:看起来像TTURLRequest(three20的一部分)并且SDURLCache是解决方案。

4

1 回答 1

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];

这对缓存更具侵略性,包括带有查询的 url。

于 2012-10-22T16:40:21.317 回答