NSData +dataWithContentsOfURL默认具有任何类型的缓存吗? 有人尝试使用此方法时遇到了什么问题,从网络获取数据的最有效方式是什么?
似乎在 iPhone5s 上,缺省策略是进行缓存(不同于iPhone5及之前的版本)。
你可以通过 options 参数来处理 NSData 的缓存策略。例如,如果你想要避免缓存,可以使用以下代码片段:
[[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:url] options:NSDataReadingUncached error:nil];
NSData *data = [NSURLConnection sendSynchronousRequest:
[NSURLRequest requestWithURL:url]
returningResponse:nil
error:&error];
请确保将此代码放入一个非主队列的NSOperationQueue中,或以其他方式从主线程卸载它。另外,您也可以使用异步请求的方式。
文档没有说明它会缓存,所以我认为我们应该假设它们不会进行任何缓存。
您希望获取哪些类型的数据
UIImage:是的,我认为您应该使用NSData
视频:您应该使用MPMoviePlayerController进行流媒体
文本:我认为您可以使用普通的NSUrlConnection。它还具有异步、同步和缓存功能。
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];
});
});