UITableView - 当他们离开屏幕时不要卸载单元格

问题描述:

我的tableView由5-10个单元格组成,每个单元格包含图像的滚动视图。问题是,当一个单元格离开屏幕时,它将删除所有图像,然后在单元格返回到屏幕上时重新加载它们。我知道这是出于性能原因,但在这种情况下,它看起来很糟糕。有没有办法阻止细胞脱离屏幕时卸载?UITableView - 当他们离开屏幕时不要卸载单元格

是的,当然。一般策略是自己预先加载所有对象。您可以在viewDidLoad中执行此操作,并将它们卸载到viewDidUnload中,将它们存储在NSMutableArray中,然后在您的tableView:cellForRowAtIndexPath:实现中引用阵列中的相应索引。

+0

好的,将来看看这个。 – sol 2010-10-14 00:33:11

+0

@sol注意内存使用情况;如果预加载所有单元格导致需要过多的内存,则您的应用程序可能会出现问题。请务必在更改之前和之后使用乐器测量应用程序的内存使用情况,以确保您的内存占用合理。 – 2010-10-14 01:15:29

你应该有一个很好的理由不采取苹果的方式。用5-10个电池,听起来不像你有一个很好的理由。也许你可以改善在NSOperationQueue中使用后台线程的单元格加载。

这篇文章可能会有所帮助:

https://stackoverflow.com/questions/1408997/dynamic-uiimage-content-loading-in-uitableview-code

+0

好吧,设想一个高度为200px的行,在iPad上的屏幕上有10个图像。当该行几乎没有离开屏幕底部时,它看起来很荒谬,所有图像消失,然后当该行在屏幕上移回时(它们从服务器重新加载)重新出现。 – sol 2010-10-14 00:23:37

+0

'NSOperationQueue'(单数)不适合工作,在这里 – 2010-10-14 01:14:21

+1

在这里缓存图像听起来很明智。 – 2010-10-14 01:19:50

感谢的补充解释。这非常有帮助。通过基于uitaleview单元的高度计算uitableview的高度,您可能可以避免出现问题,而不会禁用可重用单元。另外,如果您正在从网络重新加载单元格,您肯定会从某些缓存中受益,如前所述。