【发布时间】:2009-12-08 21:35:12
【问题描述】:
我正在尝试弄清楚如何使用 URL 加载框架来加载利用缓存的 URL。
我正在使用 NSURLConnections 并为它们提供 NSURLRequests。我什至将这些请求上的 cachePolicy 设置为 NSURLRequestReturnCacheDataElseLoad。第一次加载请求时,它会自动放入缓存中([NSURLCache sharedCache] 有)。但是下次我加载相同的请求时,NSURLConnection 似乎会忽略缓存中的内容并重新加载数据。
我是否应该手动实现缓存查找并返回缓存数据? NSURLConnection 不这样做吗?或者有什么方法可以让框架无缝使用缓存?
更新:尝试了以下但没有成功:
- 将请求缓存策略设置为
NSURLRequestReturnCacheDataElseLoad而不是NSURLRequestUseProtocolCachePolicy - 重复使用请求对象而不是创建一个新对象
- 使用
+[NSURLConnection sendSynchronousRequest:returningResponse:error:]而不是异步加载
【问题讨论】:
-
你给他们提供相同的 NSURLRequest 对象吗?文档指出 NSURLCache 通过将特定的 NSURLRequest 对象映射到指定的响应数据来工作,因此即使您向同一个 URL 发出请求,它仍然可能导致缓存未命中。
-
它从哪里请求数据?它是静态页面还是带有适当 HTTP 标头的动态页面?也许 Expires、If-Modified-Since 或 Cache-Control 标头覆盖了缓存?
-
不,我正在创建一个新的 NSURLRequest。但是当我用那个新的请求对象做
[[NSURLCache sharedURLCache] cachedResponseForRequest:]时,会有一个缓存的响应。所以 NSURLCache 不知何故知道请求是相同的。 -
PS:我尝试重用 NSURLRequest 对象。没什么区别。
-
好主意。我已经尝试过静态和动态,似乎没有什么不同。看不到您在请求或响应中提到的任何标头。
标签: iphone nsurlconnection nsurlrequest