繁体   English   中英

NSData dataWithContentsOfURL缓存

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM