我应该更喜欢哪种图像加载方法?
Posted
技术标签:
【中文标题】我应该更喜欢哪种图像加载方法?【英文标题】:Which image loading method should i prefer? 【发布时间】:2016-10-19 08:31:48 【问题描述】:我有带有 TableView 和单元格的应用程序。在每个单元格中都有 UIImageView。 所有图像都存储在服务器上。
我可以使用两种不同的方法来加载图像。他们应该更喜欢哪一个,为什么?
方法A: 使用 SDWebImage 之类的库来加载图像并将其放置在 cellForRowAtIndexPath 函数中。所以创建单元格时会下载图像。
方法 B : 当我从服务器加载带有图像列表的 JSON 时,我可以创建 UIImages 数组。在他们每个人中,我将从服务器异步下载图像。在 cellForRowAtIndexPath 函数中,我可以将之前创建的 UIImage 之一分配给当前单元格图像。
【问题讨论】:
这取决于有多少图像,但方法a可能是最好的 我加载了 20-40 张图片,你能解释一下 - 为什么这种方法更好? 那么肯定是方法 A。如果用户不滚动到它们,您将获得缓存,并且您将避免加载图像 【参考方案1】:方法 A - SDWebimage 最适合您。
并解决 tableviewcell 中的重用检查此链接:Handling download of image using SDWebImage while reusing UITableViewCell
【讨论】:
【参考方案2】:永远不要使用方法 2 来处理应用程序中的图像。这是一种数据和内存方面的昂贵方法。据我了解,这种方法会大大增加内存压力。如果您创建一个图像数组,只要您的视图控制器保留,它们就会保留在内存中。随着这个数组的大小增加,情况会变得更糟。
SDWebImage
是完成这项任务的更好方法。下载后,它将图像保存到本地存储,从而创建图像缓存。这样您就不必一次又一次地下载图像。
【讨论】:
【参考方案3】:如果您不需要缓存图像,我希望使用 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);
];
【讨论】:
【参考方案4】:我认为最好的选择是依赖一个稳定、新鲜、遵循和安全的框架。
最近出现了一个用 Swift 编写的出色框架,名为 Nuke (Swift 3 - Xcode 8)。我认为您可以尝试 Nuke,他的强大功能是“预热图像”(预热/预取意味着提前加载图像以预期其使用。),它与社区(raywenderlich.com)已经知道的 Alamofire 完全兼容,现在在 v.4.x(稳定和成熟)。这个库有自定义处理程序和请求,有很多选项。
【讨论】:
谢谢,但我想知道我应该在哪里使用图像加载。这个框架也可以是好的和新鲜的,但它至少需要 ios 9.0。我的应用正在使用 SDWebImage 在 iOS 7 上运行。 不客气,你必须为你的项目选择最好的。您的问题仅被标记为 SWIFT,并且不报告 iOS 限制,因此我试图建议最合适的产品。祝你工作顺利。以上是关于我应该更喜欢哪种图像加载方法?的主要内容,如果未能解决你的问题,请参考以下文章