如何使[加载滚动]不继续将图像添加到RAM中?

时间:2016-09-25 17:52:42

标签: ios swift uitableview optimization

我在load on scroll中做了一些UITableView来从服务器获取数据。

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath)
{
    let lastElement = self._titles_en.count - 1
    if indexPath.row == lastElement
    {
        page += 1
        searchForString()
    }
}

每个条目使用kingfisher

添加一个加载了UIImageView的UITableViewCell
loadRemoteImage(placeImage, argURL: _images[indexPath.row], cr : 0)

现在我的问题是,如何确保使用的ram不会继续增加?

我正在调试工具中的内存,它增加了10兆字节,大约3页加载,这太多了,而且它开始超过200兆字节,所以有什么诀窍可以避免这种情况公羊开放增加?我害怕用户多次滚动和繁荣,应用程序崩溃。

4 个答案:

答案 0 :(得分:3)

我说要优化你的图像。根据你所说的,你使用非常大的图像。请记住,它们是在UITableViewCell中显示的,因此压缩它们应该是安全的。

尝试抓取并显示缩略图而不是实际的全尺寸图像。这样也可以改善用户体验,减少延迟,减少内存使用量!

答案 1 :(得分:1)

您可以将处理器添加到imgage请求并缩小图像。这将使您的图像保持较小。试试这个:

let processor = ResizingImageProcessor(targetSize: CGSize(width: 100, height: 100))
imageView.kf.setImage(with: url, options: [.processor(processor)])

答案 2 :(得分:1)

我使用SDWebImage用于相同的目的,并且它有相同的非常简单的方法。此外,它为您提供了强制要加载图像或使用缓存图像(如果存在)的选项。

我也尝试查找相同的内存,在SDWebImage的情况下,对于前4-5张图像,ram增加很多,但后来保持不变。

答案 3 :(得分:1)

您可以使用AsyncDisplayKit并自动受益于智能预加载和内存管理。特别是,如果ASTableNode的单元格包含图像,但该单元格为not likely to be visible soon,则图像将从内存中清除。

示例: example