在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服务器告诉你的范围。