我正在使用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;
答案 0 :(得分:0)
根据该屏幕截图无法判断您是否存在任何性能问题,所有按钮在viewForRect
内占用了34%的时间,这可能很小。要获得更好的图片,请打开仪器中的右侧边栏并查看时间的变化,或者通过计时显示您的呼叫追踪,而不是代码视图。
现在,一般来说,创建单元格视图不是瓶颈,但是在UITableView中不重用它们。
答案 1 :(得分:0)
看起来您正在为每个单元格重新生成单元格视图(即从不重用视图)。 查看EasyTableView的文档,看起来ETV没有包含视图缓存机制,因此它为tableview的每一行生成新视图。
如果你的桌面视图有几十行或几百行,你就会陷入困境。我建议摆脱EasyTableView并使用具有单元视图缓存和重用的UITableView。
或者,实现您自己的视图缓存和重用。因此,在您的情况下,您将拥有一个UIButton池,并且每次需要在easyTableView:viewForRect:
中返回UIButton时,请检查是否有一个当前在屏幕上不可见的UIButton。如果是这样,重复使用它并改变你需要的任何东西(标签文本等......)。否则,请创建一个新的。