在iOS上,因为dataWithContentsOfURL:选项:错误:不缓存数据,这是否意味着dataWithContentsOfURL缓存数据的选项?

问题描述:

不缓存数据的选项是NSDataReadingUncached在iOS上,因为dataWithContentsOfURL:选项:错误:不缓存数据,这是否意味着dataWithContentsOfURL缓存数据的选项?

但是,如果使用dataWithContentsOfURL更新从网址上的图片在UITableViewCell(每单元一个图像),我期待在活动监控的Mac模拟器上(通过iOS 5.1模拟器中运行),那么网络流量当我连续上下滚动表格时,跳至12kb/s的接收速率。当我停止上下滚动时,网络活动下降到大约2kb/s的接收率或更低。这些图像非常小,每个像20kb左右,当我上下滚动时,我只会让1或2个图像消失/出现,因此缓存(如果有的话)不需要很大。

所以它看起来像dataWithContentsOfURL不缓存数据,甚至当我使用dataWithContentsOfURL:options:error:的选项是0意味着没办法,网络活动还是蹿升至约12KB/S。

因此,dataWithContentsOfURL缓存数据,如果没有,为什么dataWithContentsOfURL:options:error:可以选择不缓存数据?

下面也做:

[[NSURLCache sharedURLCache] setMemoryCapacity:1024*1024*10]; 

viewDidLoad但网络速度仍然会跳起来。我认为通常的建议是,如果缓存需要,然后用NSURLConnection,但由于某些原因,在苹果公司的文档的NSURLConnection参考,单词“缓存”或“高速缓存”将不会出现在所有除有提的示例项目名为“URLCache”,但根本没有提及缓存。

我们在这里讨论的两个不同的缓存,文件系统缓存,与网络高速缓存。

你可以传递到dataWithContentsOfURL:options:error:NSDataReadingUncached)标志是指前者。这暗示您正在阅读的数据只会被读取一次,因此它不需要在缓存中徘徊。您可能会惊讶于此处涉及文件系统缓存,因为我们正在读取一个URL,但请记住该URL可能是一个文件URL,在这种情况下,读取将从磁盘发生,而不是生成网络请求。

至于其他类型的缓存,网络缓存,您无法判断使用NSData便利方法加载URL的内容是否使用缓存:它不会。正如你所提到的那样,你必须使用像NSURLConnection这样的低级API。请注意,为了利用此级别的HTTP缓存,您的服务器需要发送适当的标头,以指示资源的有效期。否则,请求将根据资源发生变化的悲观假设进行。 iOS上的NSURLConnection将自动使用表单下方的NSURLCache,并且还会接收到Expires/Cache-Control标题。

旁注:使用NSURLConnection时,您不是在连接上设置高速缓存策略,而是在用于通过连接发出请求的NSURLRequest对象上。因此,您需要查看NSURLRequest及其同类的参考资料以了解详细信息。

如果以上都不是适合你,你可以滚你自己的缓存方案,或与NSURLCache启动,并直接使用它。随着iOS 5的的,NSURLCache开始使用磁盘缓存和纪念diskCapacity属性,使得它比以前更强大。如果你有一些关于资源保持新鲜的超频知识,这是正确的方法,超出了HTTP服务器告诉你的范围。