来自URL的iOS UITableViewCell图像

来自URL的iOS UITableViewCell图像,ios,objective-c,uitableview,tableviewcell,Ios,Objective C,Uitableview,Tableviewcell,我在我的UITableViewCell中加载来自某个web url的图像,这些图像的大小约为每个图像80-100KB。当我异步下载图像时,一切正常,但当我滚动tableview时,图像再次开始下载。我可以去掉这个,因为我只限制了行数。 我想如果从url下载一次的图像不应该再次下载,因为它会使用户在图像再次开始下载时查看不舒服 我正在使用下面的代码在cellforrowatinexpath中加载图像: dispatch_async(dispatch_get_global_queue(0,0), ^

我在我的
UITableViewCell
中加载来自某个web url的图像,这些图像的大小约为每个图像80-100KB。当我异步下载图像时,一切正常
,但当我滚动tableview时,图像再次开始下载。我可以去掉这个
,因为我只限制了行数。 我想如果从url下载一次的图像不应该再次下载,因为它会使用户在图像再次开始下载时查看不舒服

我正在使用下面的代码在
cellforrowatinexpath
中加载图像:

dispatch_async(dispatch_get_global_queue(0,0), ^{
    NSData * data = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString:url];
    if ( data == nil )
        return;
    dispatch_async(dispatch_get_main_queue(), ^{
        cell.eventImage.image=  [UIImage imageWithData:data];

    });
});
[cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"your image URL"]
      placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

您应该使用
SDWebImage
,它将在您的设备上缓存图像,如果相同的图像来自服务器,则从您的本地设备加载

  • 将SDWebImage添加到项目中

  • 导入
    标题

    然后将下面的代码添加到
    cellForItemAtIndexPath

    dispatch_async(dispatch_get_global_queue(0,0), ^{
        NSData * data = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString:url];
        if ( data == nil )
            return;
        dispatch_async(dispatch_get_main_queue(), ^{
            cell.eventImage.image=  [UIImage imageWithData:data];
    
        });
    });
    
    [cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"your image URL"]
          placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
    

  • 您应该使用
    SDWebImage
    ,它将在您的设备上缓存图像,如果相同的图像来自服务器,则从您的本地设备加载

  • 将SDWebImage添加到项目中

  • 导入
    标题

    然后将下面的代码添加到
    cellForItemAtIndexPath

    dispatch_async(dispatch_get_global_queue(0,0), ^{
        NSData * data = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString:url];
        if ( data == nil )
            return;
        dispatch_async(dispatch_get_main_queue(), ^{
            cell.eventImage.image=  [UIImage imageWithData:data];
    
        });
    });
    
    [cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"your image URL"]
          placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
    

  • 最好为此使用SDWebImageCache,因为这是一个有利的第三方库,可以将图像存储在缓存中。下载后,图像将自动从缓存中获取


    最好使用SDWebImageCache,因为这是一个有利的第三方库,可以将图像存储在缓存中。下载后,图像将自动从缓存中获取


    下载图像时将其放入文档目录,在下载图像之前检查文档目录是否包含图像,然后从那里加载,否则从URL下载

    下载图像时将其放入文档目录,在下载图像之前检查文档目录是否包含图像,然后从如果你想从URL下载,你可以自己制作。您可以使用NSCache保存图像。NSCache就像NSMutableDictionary(按键保存图像)。然后你可以检查一下。对于密钥,您可以使用图像的路径。
    但我也建议你使用

    如果你愿意,你可以自己做。您可以使用NSCache保存图像。NSCache就像NSMutableDictionary(按键保存图像)。然后你可以检查一下。对于密钥,您可以使用图像的路径。
    但我也建议你使用

    首次下载后使用SDWebImage it缓存映像并快速加载。首次下载后使用SDWebImage it缓存映像并快速加载。