我创建了一个应用程序,用户可以在其中上传图像,还可以查看其他用户上传的所有图像。我已经集成了分页代码并一次下载10个图像并在UITableView上显示它们。我已经使用AFNetworking完成此任务,将图像保存在缓存中。问题是,当用户继续下载图像并且计数大约为300张图像时,应用程序崩溃,因为设备内存不足。我正在寻找这个问题的最佳解决方案。我想到的是一次在缓存中保留50个图像,当用户下载较新的图像时,旧的图像将从缓存中删除。如果我能用AFNetworking做这个,请告诉我。
答案 0 :(得分:2)
您应该使用SDWebImage而不是下载它将缓存的图像,您也可以自定义该缓存选项。
我使用这个SDWebImage在UICollectionview中缓存150多个图像,在UITableview中也是如此,并且它的工作非常完美。
最初我们需要添加一个占位符然后逐个显示。
实施
1.取出SDWebImage代码 SDWebImage
2.将头文件导入到您的viewcontroller
#import <SDWebImage/UIImageView+WebCache.h>
3.然后在cellforrowindex()方法中添加一行代码。我会给你举个例子代码短片
// 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"]];
答案 1 :(得分:1)
试试APSmartStorage。您可以管理存储在内存中的图像数量。如果发生“内存警告”,图像将从内存中删除。但无论如何它是好的,因为所有图像都存储在文件中,所以你不需要从网络上重新加载它们。
答案 2 :(得分:0)
在评论中提及@Aklesh Rathaur时,您可以尝试使用SDWebImage,Facebook也会在其移动应用中使用这些内容。
当需要更多内存时,它在缓存和释放内存方面做得非常好。引用How is SDWebImage better than X?
另一方面,SDWebImage将UIImage表示缓存在内存中,并将原始压缩(但已解码)的图像文件存储在磁盘上。 UIImage使用NSCache按原样存储在内存中,因此不会涉及任何副本,只要您的应用或系统需要,就会释放内存。
告诉我们您的结果: - )