NSData dataWithContentsOfURL缓存

ces*_*ola 9 iphone caching nsdata

NSData + dataWithContentsOfURL默认有任何缓存吗?有没有人用这种方法试验过某种问题,从网上获取数据的最有效方法是什么?

Dan*_*Ray 8

使用ASIHTTPRequest.它是第三方HTTP客户端库,使网络交互更简单,并具有非常好的缓存功能.

更新:刚刚得到一个关于这个答案的downvote,这是一个很好的提醒回来和更新.自2010年8月以来,地段发生了变化.最值得注意的是:ASIHTTPRequest现已弃用,其作者鼓励人们使用其他东西.AFNetworking似乎是一个受欢迎的选择.


lhu*_*ath 5

最好使用NSURLConnection.您提供的NSURLRequest可以配置为以您希望的方式执行缓存,但默认情况下,它只会对其响应中具有适当标头的HTTP资源执行标准缓存.

这就是我做的:

NSData *data = [NSURLConnection sendSynchronousRequest:
                [NSURLRequest requestWithURL:url]
                                     returningResponse:nil
                                                 error:&error];
Run Code Online (Sandbox Code Playgroud)

但是,请确保将其置于不是主队列的NSOperationQueue中,或者以其他方式从主线程中卸载它.或者,使用异步请求.


Mic*_*CMS 5

似乎在iPhone5s上默认策略是缓存(unlinke iPhone5及更早版本).

您可以通过options参数处理NSData的缓存策略.例如,如果要避免缓存,可以使用以下剪切:

[[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:url] options:NSDataReadingUncached error:nil];
Run Code Online (Sandbox Code Playgroud)


vod*_*ang 3

文档没有说它会缓存,所以我认为我们应该假设它们不做任何缓存。

您想获取哪类数据

UIImage :是的,我认为你应该使用 NSData

视频:您应该使用 MPMoviePlayerController 进行流式传输

文本:我认为你可以做正常的NSUrlConnection。它还具有异步、同步和缓存