0

我正在使用 EasyTableView 库,你能告诉我,当我为我的 Tableview 动态创建行时,为什么它在 Instruments 中显示出如此多的性能滞后?

上图中的代码如下:

CGRect buttonRect   = CGRectMake(10, 0, 473, 677);
    UIButton *button    = [UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = buttonRect;
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, button.frame.size.height-100, button.frame.size.width,50)];
    label.backgroundColor = [UIColor blackColor];
    label.textColor = [UIColor whiteColor];
    label.textAlignment = NSTextAlignmentCenter;
    [button addSubview:label];
    // Use a different color for the two different examples
    return button;

性能滞后

4

2 回答 2

0

看起来您正在为每个单元格重新生成一个单元格视图(即从不重用视图)。查看 EasyTableView 的文档,看起来 ETV 没有包含视图缓存机制,因此它为 tableview 的每一行生成新视图。

如果你的 tableview 有几十或几百行,你就有大麻烦了。我建议摆脱 EasyTableView 并使用具有单元格视图缓存和重用的 UITableViews。

或者,实现您自己的视图缓存和重用。因此,在您的情况下,您将拥有一个 UIButton 池,并且每次需要在中返回 UIButton 时easyTableView:viewForRect:,请检查是否有一个当前在屏幕上不可见。如果是这样,请重用它并更改您需要的任何内容(标签文本等......)。否则,创建一个新的。

于 2013-02-04T11:10:45.217 回答
0

根据该屏幕截图,无法判断您是否有任何性能问题,所有按钮都需要 34% 的时间viewForRect,这可能很小。要获得更好的图片,请在 Instruments 中打开右侧边栏并查看时间流逝,或显示您的调用跟踪时间,而不是代码视图。

现在,一般来说,创建单元格视图不是瓶颈,但不在 UITableView 中重用它们是。

于 2013-02-04T08:05:15.763 回答