gpt4 book ai didi

objective-c - 当 UITableView 中的每个单元格都是唯一的时该怎么办?

转载 作者:行者123 更新时间:2023-11-28 19:20:03 26 4
gpt4 key购买 nike

我有一个 UITableView,其中每个单元格的内容都是唯一的,但目的相似,我不确定如何制作单元格。见下图。
Example Image
黑框的轮廓代表表格,表格以行分隔。每行的高度可变,并包含不同数据的可视化表示。
我有大约 50 行,每行包含大约 10 条存在于 2UIViews 和 UILabel 中的绿/蓝线。我不需要编辑或删除。数据大约是 ±30kB 的 JSON,我将其转换为强类型对象。


到目前为止,我已经确定了以下方法:

<罢工>

<罢工>
    <罢工>
  1. 没有出队,保存每个单元格,一旦用它对应的数据构造。
  2. 不出队,不保存单元格,而是完全从数据中初始化和重建视觉表示。

    出队总是更好。

  3. 通过唯一标识符将单元格出队,并以其他方式构造它
    • 这可以使用唯一标识符来完成吗,还是我必须自己实现?
  4. 将单元格出队并从数据中完全重建视觉表示。

滚动时视觉表示不会立即出现在表格单元格上,这很好,在工作线程上构建单元格,然后在构建每个单元格时添加单元格的内容。

哪种方法最合适并被认为可以接受?或者为什么另一种方法会更好?

最佳答案

如果行数是

  1. 固定
  2. 行数非常小(内存占用明智)

并且每一行都相当不相关,Quick Way™ 将预初始化所有单元格并根据需要返回它们:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
return [myCells objectAtIndex:indexPath.row];
}

但是,如果您的单元有可能无法一次全部放入内存(请记住所有背景内容也加起来总计 22-25MB 可用堆空间),您仍然应该考虑稍微更详细的方式,并在第一次访问时延迟创建单元格,然后缓存结果。好消息是 UITableView 已经为您做到了,只需按预期使用单元格标识符即可。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
NSString *identifier = [NSString stringWithFormat:@"MyCell%d", indexPath.row];
MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
cell = [[MyTableViewCell alloc] initWithCellIdentifier:identifier];
[cell autorelease]; // if non-ARC
}
return cell;
}

我不建议使用 rocir 建议的 nil 标识符。通过提供 nil 的单元格标识符,您可以防止 UTTableViewController 为您缓存单元格(documentation)。当您的单元格滚动出可见区域并在稍后用户滚动回来时再次显示时,这会产生额外的开销。在这种情况下,单元格可能仍然存在,但是当调用 tableView:cellForRowAtIndexPath: 时,您无法访问它。

关于objective-c - 当 UITableView 中的每个单元格都是唯一的时该怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9651363/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com