Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone UITableView';s细胞在不可见时释放_Iphone_Objective C_Ios_Uitableview - Fatal编程技术网

Iphone UITableView';s细胞在不可见时释放

Iphone UITableView';s细胞在不可见时释放,iphone,objective-c,ios,uitableview,Iphone,Objective C,Ios,Uitableview,我的视野很开阔。每行都是带有视频、图像等的重物。 当用户滚动此视图时,如何释放不可见行的内存并加载当前可见行?您是否按照苹果的建议回收UITableViewCell?如果没有,你必须阅读苹果的文档。在cellForRowAtIndexPath:delegate中,您应该有一些东西[customCell setMediaObjects:]。在customCell类中,您可以从内存中释放所有以前的MediaObject 当您调用dequeueReusableCellWithIdentifier时,

我的视野很开阔。每行都是带有视频、图像等的重物。
当用户滚动此视图时,如何释放不可见行的内存并加载当前可见行?

您是否按照苹果的建议回收UITableViewCell?如果没有,你必须阅读苹果的文档。在cellForRowAtIndexPath:delegate中,您应该有一些东西[customCell setMediaObjects:]。在customCell类中,您可以从内存中释放所有以前的MediaObject

当您调用dequeueReusableCellWithIdentifier时,首先会创建10个单元格(在屏幕上一刻只能显示10个单元格),然后将它们加载并配置为显示。
因此,单元格不会被释放。

我假设您所说的释放内存是由您所在行的图像和视频使用的,而不是该行本身

在tableview代理中

 -(void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView
告诉您tableview滚动何时停止

 [myTableView indexPathsForVisibleRows]
为您提供可见内容的数组


如果您的行不在此数组中,则该行不可见,您可以对其执行图像/视频清理。

正如其他人所说,您应该确保正确回收单元格,并且在重复使用单元格时不会破坏您需要重新创建的内容

但是,您可能希望释放单元或其视图保留的其他资源。或者,如果该单元有任何挂起的下载请求,例如,您可能希望重置它们的优先级,甚至在该单元屏幕外时取消它们

我认为最干净的方法就是重写
-[UITableViewCell prepareforuse]

当单元格被放回重用队列时,将调用此函数。如果用户在表格中快速上下移动,您可能不希望在单元格离开屏幕时清理单元格(例如,通过查看IndExpathForVisibleRows)


但是,当单元格实际放回重用队列时,这是一个很好的时间来做这项工作,因为您知道,在您退出队列并重新配置它之前,该单元格不会再次出现在屏幕上。

使用可重用单元格,忘记内存处理(将其留给系统)