Uitableview 当需要下载许多图像时,如何处理内存?

Uitableview 当需要下载许多图像时,如何处理内存?,uitableview,memory-management,afnetworking,Uitableview,Memory Management,Afnetworking,我已经创建了一个应用程序,用户将能够上传图像,他们也可以看到其他用户上传的所有图像。我集成了分页代码,一次下载10幅图像,并在UITableView上显示它们。我使用AFNetworking来完成这项任务,即将图像保存在缓存中。问题是,当用户不断下载图像,并且图像数量达到300张左右时,应用程序就会崩溃,因为设备内存不足。我正在寻找这个问题的最佳解决方案。我的想法是每次在缓存中保存50个图像,当用户下载较新的图像时,较旧的图像将从缓存中删除。也请让我知道,如果我可以这样做与AFNetworkin

我已经创建了一个应用程序,用户将能够上传图像,他们也可以看到其他用户上传的所有图像。我集成了分页代码,一次下载10幅图像,并在UITableView上显示它们。我使用AFNetworking来完成这项任务,即将图像保存在缓存中。问题是,当用户不断下载图像,并且图像数量达到300张左右时,应用程序就会崩溃,因为设备内存不足。我正在寻找这个问题的最佳解决方案。我的想法是每次在缓存中保存50个图像,当用户下载较新的图像时,较旧的图像将从缓存中删除。也请让我知道,如果我可以这样做与AFNetworking

如评论中所述,你可以试试,Facebook也在他们的移动应用程序中使用

当需要更多内存时,它在缓存和释放内存方面做得相当好。引用

另一方面,SDWebImage将UIImage表示缓存在内存中,并将原始压缩(但解码)图像文件存储在磁盘上。UIImage使用NSCache按原样存储在内存中,因此不涉及任何拷贝,只要应用程序或系统需要,内存就会被释放


让我们知道您的结果:-)

您应该使用SDWebImage,而不是下载它将缓存的图像,您还可以自定义该缓存选项

Iam使用此SDWebImage在UICollectionview和UITableview中缓存150多个图像,其工作非常完美

最初我们需要添加一个占位符,然后它会一个接一个地出现

实施

1.取出SDWebImage代码

2.将头文件导入到viewcontroller中

#import <SDWebImage/UIImageView+WebCache.h>

试试看。您可以管理存储在内存中的图像数量。如果出现“内存警告”,图像将从内存中删除。但无论如何,这没关系,因为所有图像都存储在文件中,所以您不需要从网络重新加载它们。

您是否将图像存储在文档目录中?把你的代码贴在泄漏的地方。@ganathy不,AFNetworking将图像存储在它的缓存中,我不知道这个缓存在哪里。这是内存分配问题,而不是泄漏问题。每次开始下载图像时,请清除缓存内存。e、 如果你要下载第二个50个图像,只需清除缓存并开始下载。像这样尝试一次。@Ganapathy您能告诉我如何清除缓存吗?您可以使用SDWebImage,它可以处理300多个图像。
 // Here we use the new provided setImageWithURL: method to load the web image
    [cell.imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
                   placeholderImage:[UIImage imageNamed:@"placeholder.png"]];