[英]NSData dataWithContentsOfURL cache
NSData + dataWithContentsOfURL默认有任何缓存吗? 有没有人用这种方法试验过某种问题,从网上获取数据的最有效方法是什么?
使用ASIHTTPRequest。 它是第三方HTTP客户端库,使网络交互更简单,并具有非常好的缓存功能。
更新:刚刚得到一个关于这个答案的downvote,这是一个很好的提醒回来和更新。 自2010年8月以来,地段发生了变化。 最值得注意的是:ASIHTTPRequest现已弃用,其作者鼓励人们使用其他东西。 AFNetworking似乎是一个受欢迎的选择。
最好使用NSURLConnection。 您提供的NSURLRequest可以配置为以您希望的方式执行缓存,但默认情况下,它只会对其响应中具有适当标头的HTTP资源执行标准缓存。
这就是我做的:
NSData *data = [NSURLConnection sendSynchronousRequest:
[NSURLRequest requestWithURL:url]
returningResponse:nil
error:&error];
但是,请确保将其置于不是主队列的NSOperationQueue中,或者以其他方式从主线程中卸载它。 或者,使用异步请求。
似乎在iPhone5s上默认策略是缓存(unlinke iPhone5及更早版本)。
您可以通过options参数处理NSData的缓存策略。 例如,如果要避免缓存,可以使用以下剪切:
[[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:url] options:NSDataReadingUncached error:nil];
文档没有说它会缓存,所以我认为我们应该假设它们不进行任何缓存。
您想要获得哪种数据
UIImage:是的,我认为你应该使用NSData
视频:您应该使用MPMoviePlayerController进行流式传输
文字:我认为你可以做正常的NSUrlConnection 。 它还具有异步,同步和缓存功能
如果你需要的只是从网址下载图片,不要费心使用任何库,只需一个简单的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];
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.