我正在尝试测量我的UITableView的滚动性能,在使用子视图和自己绘制视图之间。正如我们可能知道的滚动性能,有几篇着名的文章(Tweetie,TableViewSuite,Glassy和Glassy2可以帮助我们掌握这项技术,所有文章都会指向同一点:当我们有很多子视图时,我们应该使用drawRect。
问题在于我不知道如何在两种情况下对性能进行基准测试:使用子视图或绘图。绘图实际上比subview更难,所以很难说服每个人直接绘图。我正在尝试编写2个小样本并使用2种技术并对性能结果进行基准测试。我目前正在尝试这个,但它为这两种技术产生了相同的结果:
NSDate *date = [NSDate date];
static NSString *CellIdentifier = @"CellIdentifier";
CustomDrawingTableViewCell *cell = (CustomDrawingTableViewCell *) [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[CustomDrawingTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier] autorelease];
}
// Configure the cell...
// Main Code is HERE
NSDate *date2 = [NSDate date];
NSLog(@"%f", [date2 timeIntervalSinceDate:date]);
return cell;
我的手机有大约4张图片,1张文字
答案 0 :(得分:13)
我建议使用Instruments而不是直接在代码中运行测试。核心动画工具将跟踪应用程序显示的实际每秒帧数(FPS)。
答案 1 :(得分:5)
首先,我将确认如果您有很多子视图,那么使用drawRect和Tweetie方法(例如)将获得巨大的性能优势。我们有一个项目,每个单元格都有14个子视图,在旧设备上就像糖蜜一样。已经开始直接进行,它甚至在旧的3G(而不是3GS)设备上以iphone4速度运行。
所以这是值得的。
虽然测量明智,但你在错误的位置进行测量。您正在测量出列单元格或初始化单元格的时间,这两者都与在屏幕上呈现所花费的时间无关。