为什么在以下代码中报告性能滞后?

时间:2013-02-04 08:00:32

标签: ios objective-c performance instruments

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

上图中的代码如下:

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;

Performance Lag

2 个答案:

答案 0 :(得分:0)

根据该屏幕截图无法判断您是否存在任何性能问题,所有按钮在viewForRect内占用了34%的时间,这可能很小。要获得更好的图片,请打开仪器中的右侧边栏并查看时间的变化,或者通过计时显示您的呼叫追踪,而不是代码视图。

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

答案 1 :(得分:0)

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

如果你的桌面视图有几十行或几百行,你就会陷入困境。我建议摆脱EasyTableView并使用具有单元视图缓存和重用的UITableView。

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