ios - UITableViewCell是以编程方式还是在IB中?

时间:2011-03-28 02:46:06

标签: iphone uitableview interface-builder

首先,请允许我说我对tableview的性能感兴趣,因为每个单元格都会有很多数据。

我想知道的是,以编程方式或使用“界面”构建器构建我的tableView单元是一个更好的主意吗?他们各自的利弊是什么?

3 个答案:

答案 0 :(得分:4)

在IB中设计和调整细胞肯定更容易。如果在性能方面存在任何差异,只要您按照建议重复使用单元格,它就不太可能引人注意。如果您正在重复使用细胞,那么您将只创建一小部分细胞。无论您是以编程方式创建单元格还是从笔尖加载,都应该绝对这样做。

有些事情在代码中比在IB中更容易实现,并且您可能需要在代码中执行一些操作。当你遇到其中一种情况时,你会知道它。即便如此,您仍然可以采用混合方法 - 从笔尖加载单元格,然后根据需要以编程方式对其进行修改。

答案 1 :(得分:3)

如果UITableViewCell中有很多UILabel,性能可能会受到影响。

尝试将IB中的单元格放在一起,确保IB中的单元格标识符与您在代码中使用的单元格标识符相匹配。

还要确保所有标签都设置为不透明,因为这有助于提高性能。

完成所有这些操作后,在设备上使用CoreAnimation仪器进行分析,然后尝试滚动表格。滚动时你会得到一个FPS读数 - 20 FPS有点不稳定但可以接受,远远低于那个非常不稳定。目标是30FPS或更高。

如果性能不佳,或者由于您使用的背景而必须具有透明标签,请考虑使用混合方法。在IB中设计单元格,但不是使用该XIB文件,而是在代码中将其用作模板。

这意味着:

1)在单元格创建时,在单元格的layoutSubviews中,将xib中的UITableViewCell的一个实例读入静态变量。

2)如果您的目标是iOS 3.2或更高版本,则对于XIB中的每个标签,使用与标签相同的字体在相同位置创建CATextLayer(CATextLayers将渲染得更快)。

3)如果您的目标是3.1或更高版本(除非您生气,请不要低于3.0),在单元格的drawRect中,在模板标签中指定的位置绘制单元格的所有文本。

一般来说,如果你正确地重复使用单元格,那么使标签不透明可能就足够了(检查以确保它们像你期望的那样出列)。

答案 2 :(得分:0)

听起来你最好以编程方式构建你的单元格。 IB没有很多定制服务。以编程方式,您可以做更多。这些是关于每个人的利弊。