我正在尝试创建一个UITableViewCell
,其中包含UIScrollView
,可以UITableView
中的每个单元格水平滚动。
一切都正确显示并且运作良好。但是,当我在UITableView
上不断地上下滚动时,内存使用率会上升和上升.....我认为这意味着当{{I}时,我会不断添加自定义元素。 {1}}正在重复使用。我想知道如何阻止这种情况发生。
这是我的代码:
UITableViewCell
答案 0 :(得分:1)
这里似乎有两个问题。我会尝试解释实际发生的事情,但你应该按照 mbm29414 的答案来解决该怎么做。
在此方法的第一部分中,您要求使用标识符UITableViewCell
:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
下一部分是检查您是否收到了此电话的小区:
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier];
}
这意味着如果您的第一行代码DID没有返回一个单元格对象,那么您将实例化一个新的代码。
稍后在您的方法中,您将实例化另一个单元格:
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier];
UIScrollView *scrollCell (...)
这样你可能实际上不会重复使用细胞,我不确定。至少,它不应该存在。你可能每次都会分配两倍的空间。 删除最后一个实例,这应该可能有所帮助。
我认为另一个问题是你要将scrollView和UILabels添加到单元格的子视图中。你的生活圈子:
当你的单元格在[tableView dequeueReusable..]
期间从死里复活时,它们仍然包含带有UILabel的UIScrollView。您的代码没有利用它,而是忽略它。这意味着您要在单元格中添加带标签的ADDITIONAL scrollView。如果你上下滚动很多,这意味着一个单个单元格可能包含50个不同的scrollViews,所有这些都会进行相同的处理。
接下来会发生这种情况:
要解决这个问题,你应该像mbm29414建议的那样,制作你自己的UITableViewCell子类。这样,您可以说cell.codeString.text=@"blah";
答案 1 :(得分:0)
虽然您每次 重新创建新的UITableViewCell
,但您似乎也在无休止地添加UIScrollView
和UILabel
个对象。
首先,删除第二个电话:
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
其次,尝试对UITableViewCell
进行子类化,在init
方法或IB中使用您喜欢的UI。然后,创建一个“设置”方法,该方法接受一个对象并相应地配置每个UI元素。这样,您不仅可以回收您的单元格,还可以不断创建更多UIView
子类实例。
答案 2 :(得分:0)
一些事情。