下载图片时,我通常会异步使用dataWithContentsOfURL:
,但它总是返回UIImage
。
网络上的所有数据最初都是NSData
的形式吗?或者将其下载为NSData
,然后将其转换为UIImage
作为浪费,我应该尝试直接将其下载为UIImage
?
答案 0 :(得分:2)
基本上,他们是DO
相同的事情(无论哪种方式你得到NSData),所以 NO 性能损失。如果您想 改善 效果,请尝试SDWebImage
(请参阅:https://github.com/rs/SDWebImage)。该库缓存图像并异步下载它们。
答案 1 :(得分:0)
数据字节来自网络。这些字节可以被视为字节(如果您使用NSData
作为它们的包装)或作为图像(如果包装器是UIImage
)。底层数据字节是一样的,它只是告诉应用程序使用那些不同的字节。你需要编写多少代码就有所不同。
因此,使用哪个选项对您和您的情况更有意义。从长远来看,运行下载数据字节并向您返回图像的操作数量大致相同。
答案 2 :(得分:0)
使用dataWithContentsOfURL:
是否存在“性能损失”并非没有。使用dataWithContentsOfURL:
所损失的是很多功能,例如:
dataWithContentsOfURL:
用于根据文档加载本地文件。来自文档:
重要:请勿使用此同步方法请求基于网络 网址。对于基于网络的URL,此方法可以阻止当前线程 在慢速网络上持续数十秒,导致用户不畅 经验,在iOS中,可能会导致您的应用被终止。
你应该使用的是(来自文档):
相反,对于非文件网址,请考虑使用 NSSession类的
dataTaskWithURL:completionHandler:
方法。
这就是你如何使用它:
-(void) sendHTTPGet
{
NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject delegate: self delegateQueue: [NSOperationQueue mainQueue]];
NSURL * url = [NSURL URLWithString:@"http://theURL"];
NSURLSessionDataTask * dataTask = [defaultSession dataTaskWithURL:url
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if(error == nil)
{
//use your data
}
}];
[dataTask resume];
}