2016-09-25 34 views
10

我在我的UITableView中做了一些load on scroll以从服务器获取数据。如何使[滚动加载]不继续添加图像到内存中?

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

每个条目添加一个UITableViewCell与加载UIImageView使用kingfisher

loadRemoteImage(placeImage, argURL: _images[indexPath.row], cr : 0) 

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

我在调试工具中观察内存,它增加了10兆字节大约3页的负载,这是太多了,它开始超过200兆字节,所以有什么技巧可以避免这种内存开放增加?我害怕用户多次滚动并出现繁荣,应用程序崩溃。

+0

有你异型看到,如果你是刚刚泄露的图像,或者如果他们是住缓冲? –

+0

好问题@GradyPlayer,你能告诉我如何确定吗? – DeyaEldeen

+0

在这种方法写这行代码:'loadRemoteImage(placeImage,argURL:_images [indexPath.row],cr:0) ' –

回答

1

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

例如: example

+0

谢谢skensell – DeyaEldeen

+0

没问题,很高兴我可以帮忙! – skensell

+1

我应该说,要从自动内存清除中受益,您应该使用“ASNetworkImageNode”。它可以清除图像,因为它使用指定初始化程序中的缓存和下载程序从磁盘(如果缓存)或从远程位置重新获取图像。 – skensell

3

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

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

+0

我做到了这一点,但真的需要一个详细的答案。 – DeyaEldeen

1

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

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

这是有用的,但不是我可以接受的详细答案。 – DeyaEldeen

1

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

我也尝试查找内存相同,在我的情况下,与SDWebImage,第4-5图像,RAM增加很多,但后来它保持不变。

+0

我相信翠鸟有这个功能,但是被隐藏或者其他东西。 – DeyaEldeen

相关问题