NSData + dataWithContentsOfURL默认有任何缓存吗? 有没有人使用这种方法试验过某种问题,从网上获取数据的最有效方法是什么?
答案 0 :(得分:8)
使用ASIHTTPRequest。它是第三方HTTP客户端库,使网络交互更简单,并具有非常好的缓存功能。
更新:刚刚回答了这个答案,这是一个很好的提示,可以回来更新。自2010年8月以来,地段发生了变化。最值得注意的是:ASIHTTPRequest现已弃用,其作者鼓励人们使用其他东西。 AFNetworking似乎是一个受欢迎的选择。
答案 1 :(得分:5)
最好使用NSURLConnection。您提供的NSURLRequest可以配置为以您希望的方式执行缓存,但默认情况下,它只会对其响应中具有相应标头的HTTP资源执行标准缓存。
这就是我的所作所为:
NSData *data = [NSURLConnection sendSynchronousRequest:
[NSURLRequest requestWithURL:url]
returningResponse:nil
error:&error];
确保将它放在一个不是主队列的NSOperationQueue中,或以其他方式从主线程卸载它。或者,使用异步请求。
答案 2 :(得分:5)
似乎在iPhone5s上默认策略是缓存(unlinke iPhone5及更早版本)。
您可以通过options参数处理NSData的缓存策略。例如,如果要避免缓存,可以使用以下剪切:
[[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:url] options:NSDataReadingUncached error:nil];
答案 3 :(得分:3)
文档没有说它会缓存,所以我认为我们应该假设它们不进行任何缓存。
您想获得哪种数据
UIImage:是的,我认为你应该使用NSData
视频:您应该使用MPMoviePlayerController进行流式传输
文字:我认为你可以正常NSUrlConnection。它还具有异步,同步和缓存
答案 4 :(得分:-1)
如果您需要的只是从网址下载图片,不要费心使用任何库,只需一个简单的dispatch_async调用即可。像这样:
dispatch_async( dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0 ), ^(void)
{
NSData * data = [NSData dataWithContentsOfURL:imageUrl];
dispatch_async( dispatch_get_main_queue(), ^(void){
self.image = [UIImage imageWithData:data];
});
});