我有一个UITableView。每一行都是重物,有视频,图像等。 当用户滚动此视图时,如何释放不可见行的内存并加载当前可见行?
答案 0 :(得分:6)
我假设您正在谈论释放行所使用的图像和视频所使用的内存,而不是行本身。
在你的tableview委托中,
-(void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView
告诉您桌面滚动何时停止。
[myTableView indexPathsForVisibleRows]
为您提供可见内容的数组。
如果您的行不在此数组中,则该行不可见,您可以对其进行图像/视频清理。
答案 1 :(得分:2)
您是否按照Apple的建议回收UITableViewCells?如果没有,你必须阅读Apple的文档。在cellForRowAtIndexPath:委托内你应该有[customCell setMediaObjects:]。在customCell类中,您可以从内存中释放所有以前的mediaObject。
答案 2 :(得分:2)
正如其他人所说的那样,你应该确保你正确地回收细胞,而不是在细胞被重复使用时破坏你需要重建的东西。
但是,您可能希望释放单元格或其视图保留的其他资产。或者,如果该单元格有任何挂起的下载请求,例如,您可能希望重置其优先级,甚至在单元格在屏幕外时取消它们。
我认为最简洁的方法是覆盖-[UITableViewCell prepareForReuse]
当单元格放回重用队列时调用此方法。如果用户快速上下移动表格,您可能不希望在单元格离开屏幕时清理单元格(例如,通过查看indexPathsForVisibleRows)。
但是当单元格实际放回重用队列时,这是完成这项工作的好时机,因为你知道在你出列并再次配置它之前,单元格不会再出现在屏幕上。
答案 3 :(得分:1)
A Closer Look at Table-View Cells - Apple Documentation
当您第一次调用dequeueReusableCellWithIdentifier时(一次只能在屏幕上显示10个单元格),将创建单元格,然后将加载并配置它们以进行显示。 因此,细胞不会被释放。