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

时间:2016-10-19 08:31:49

标签: ios swift uitableview uiimageview sdwebimage

我有使用TableView和单元格的应用程序。在每个单元格中都有UIImageView。 所有图像都存储在服务器上。

我可以使用两种不同的方法来加载图像。哪个应该更喜欢?为什么?

方法A : 使用像SDWebImage这样的库来加载图像并将其放在cellForRowAtIndexPath函数中。因此,在创建单元格时将下载图像。

方法B : 当我从服务器加载带有图像列表的JSON时,我可以创建UIImages数组。在每个中我将从服务器异步下载图像。在cellForRowAtIndexPath函数中,我可以将之前创建的UIImage之一分配给当前单元格图像。

4 个答案:

答案 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(稳定且成熟)。该库具有自定义处理程序和具有许多选项的请求。