我有使用TableView和单元格的应用程序。在每个单元格中都有UIImageView。 所有图像都存储在服务器上。
我可以使用两种不同的方法来加载图像。哪个应该更喜欢?为什么?
方法A : 使用像SDWebImage这样的库来加载图像并将其放在cellForRowAtIndexPath函数中。因此,在创建单元格时将下载图像。
方法B : 当我从服务器加载带有图像列表的JSON时,我可以创建UIImages数组。在每个中我将从服务器异步下载图像。在cellForRowAtIndexPath函数中,我可以将之前创建的UIImage之一分配给当前单元格图像。
答案 0 :(得分:1)
方法A - SDWebimage最适合您。
并解决tableviewcell中的重用问题,请检查以下链接:Handling download of image using SDWebImage while reusing UITableViewCell
答案 1 :(得分:1)
不要使用方法2来处理应用程序中的图像。这是一种数据和内存明智的方法。据我所知,这种方法会大大增加记忆压力。如果创建一个图像数组,只要视图控制器保留,它们就会保留在内存中。随着这个阵列的大小增加,情况会变得更糟。
SDWebImage
是完成此任务的更好方法。它一旦下载就将图像保存到本地存储,从而创建图像缓存。所以你不必一次又一次地下载图像。
答案 2 :(得分:0)
如果您不需要缓存图像,我希望使用AFNetworking,从服务器加载图像时,此工具比SDWebImage更快。 //////
如果您使用自定义单元格=>用您的单元格的名称文件替换UITableViewCell
-(void)fetchImageFromURL:(NSString*)imageURLString Cell:(UITableViewCell*)cell {
/*
_ This Function will accept the string url for Image
_ Also the cell that have image icon
_ After take paramter will make request to fetch image
_
1- if return image => will show Image
*/
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@", imageURLString]];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
__weak UITableViewCell *weakCell = cell;
// get image with request
[[cell imageView ] setImageWithURLRequest:request placeholderImage:nil
success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
[[weakCell ImageIcon ] setImage:image];
[weakCell setNeedsLayout];
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
NSLog(@"couldn't load image with url :%@", url);
}];
}
答案 3 :(得分:0)
在我看来,最好的选择是依靠稳定,新颖,跟随和安全的框架。
最近出现了一个用Swift编写的名为Nuke的伟大框架( Swift 3 - Xcode 8 )。我想你可以试试Nuke,他的力量就是“预热图像”(预热/预取意味着提前加载图像以预期其使用。),它与社区已经知道的Alamofire完全兼容(raywenderlich.com)现在是v.4.x(稳定且成熟)。该库具有自定义处理程序和具有许多选项的请求。