我应该更喜欢哪种图像加载方法?

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 限制,因此我试图建议最合适的产品。祝你工作顺利。

以上是关于我应该更喜欢哪种图像加载方法?的主要内容,如果未能解决你的问题,请参考以下文章

r 你更喜欢哪种方法?

哪种方法更喜欢在 MongoDB 中动态管理数据库请求?

xmmintrin.h 与 gcc 向量扩展

Android:我应该使用哪种图像格式,为啥? [关闭]

YII 中的数据库方法

故事板 Segue 与委派。哪种方法更适合在 ViewController 之间传递数据