gpt4 book ai didi

ios - 使用 dequeueReusableCellWithIdentifier 不会显得更快(或更低的内存)?

转载 作者:行者123 更新时间:2023-11-28 18:34:12 25 4
gpt4 key购买 nike

当我想创建一个带有自定义单元格的表格时,这就是我编写标准代码的方式:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"CustomCell";
CustomCell *cell = (CustomCell*)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

if (cell == nil)
{
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
cell = [topLevelObjects objectAtIndex:0];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
else
{
NSLog(@"reuse!");
}

cell.property1 = ....
cell.property2 = ....
return cell;
}

这就是我创建自定义单元格的大致方式:

  • 创建一个 CustomCell.h(继承 UITableViewCell)和 CustomCell.m 以及一个 CustomCell.xib
  • 在 CustomCell.xib 中,将顶层 UIView 的“class”属性更改为“CustomClass”

我已经这样做了一段时间,但今天我终于决定做一个测试,看看表格是否真的正确地重用了单元格。

不。该表未重复使用任何单元格!上面代码片段中的 NSLog(@"reuse!") 永远不会被触发。

我决定使用以下两种方法对具有 100 万个单元格的 TableView 进行性能比较:

方法 #1 使用了上述方法。请注意,UIView 是我的 CustomCell.xib 中的顶级 View ,并且没有在 xib 上配置重用标识符

  • cell not reused (NSLog reused! not printed)
  • 峰值内存约 3.4MB,峰值 CPU 60%
  • 滚动流畅

方法 #2 在 xib 的顶层使用一个 UITableViewCell,我将所有控件放在这个 UITableViewCell 的内容 View 上。在 XIB 中,我将此单元格的重用标识符配置为“CustomCell”。

  • cell 重用(NSLog 重用打印多次)
  • 峰值内存约 6.1MB,峰值 CPU 约 88%
  • 滚动流畅

两个问题:

  1. 为什么我在方法 #2 上没有看到更低的 CPU 和内存使用率,是不是方法 #1 错误而方法 #2 正确,因为方法 #1 根本没有重用任何单元格?或者换个角度看,为什么方法一傻傻地一遍又一遍地加载nib,但还是滚动的这么好?

  2. 为自定义单元格创建自定义 xib 时,顶级对象是 UIView 还是 UITableViewCell 有什么区别吗? (好像没什么区别?)

最佳答案

似乎 reuseIdentifier 在您的 XIB 文件中设置不正确。

您也可以通过添加以编程方式设置它

[yourTable registerNib:[UINib nibWithNibName:@"CustomCell" bundle:nil] forCellReuseIdentifier:@"CustomCell"];

在使用 TableView 之前的某个地方。例如在 viewDidLoad 中。

更新

问题一、如果不设置cell reuse identifier cells life circle如下:

1.创建。

2.显示出来了

3.移出可见区域

4.不需要了,删掉

如果您使用重用标识符单元格,典型的生命周期是:

1.从可重用队列中弹出..

2.显示出来了

3.移出可见区域

4.推送到可重用队列。

所以性能差异是由于执行速度更快:创建/释放操作或弹出/推送操作。两种变体的内存使用量应该大致相同。

关于ios - 使用 dequeueReusableCellWithIdentifier 不会显得更快(或更低的内存)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22102680/

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