我正在将自定义UITableViewCells
队列化,并且iPod第5代所需的时间是天文数字,导致严重的滞后性和非常糟糕的性能
这是我的数据源代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
CFTimeInterval startTimeInterval = CACurrentMediaTime();
if (tableView == self.tableView)
{
NSString *identifier = nil;
if (indexPath.section == RecentUserSection)
{
identifier = recentContactCellIdentifier;
} else if (indexPath.section == GroupsSection) {
identifier = contactCellIdentifier;
} else if (indexPath.section == InboxNotificationSection)
{
identifier = inboxNotificationCellIdentifier;
} else {
identifier = contactCellIdentifier;
}
CFTimeInterval startDequeue = CACurrentMediaTime();
ContactsViewControllerTableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:identifier forIndexPath:indexPath]; // this is taking 0.05 second
CFTimeInterval dequeueDuration = CACurrentMediaTime() - startDequeue;
CFTimeInterval getUserStart = CACurrentMediaTime();
id user = [[self.sections objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
CFTimeInterval getUserDuration= CACurrentMediaTime() - getUserStart;
CFTimeInterval setUserStart = CACurrentMediaTime();
cell.user = user;
CFTimeInterval setUserDuration = CACurrentMediaTime() - setUserStart;
cell.panDelegate = self;
cell.auxillaryActionsDelegate = self;
CFTimeInterval duration = CACurrentMediaTime() - startTimeInterval;
if (duration > 0.016)
{
DLog(@"Not realtime - duration = %lf",duration);
DLog(@"\ndequeue duration = %lf,\nget user duration = %lf,\nset user duration = %lf",dequeueDuration,getUserDuration,setUserDuration);
}
return cell;
}
这是一个示例日志
dequeue duration = 0.055643,
get user duration = 0.000025,
set user duration = 0.002490
我的所有单元格都实现了prepareForReuse
,平均时间是:
-(void)prepareForReuse
{
DLog(@"Reusing tableview cell");
//doing stuff
CFTimeInterval duration = CACurrentMediaTime() - startTimeInterval;
DLog(@"Prepare for reuse time is %lf",duration);
}
日志输出
Prepare for reuse time is 0.001048
所以它必须是UITableView
内部的东西 - 我能做些什么吗?我不明白为什么它在iPod上如此之慢,但在iPhone上它的工作速度很快
答案 0 :(得分:1)
一般的答案是你在显示单元格时进行了太多的计算/计算。最常见的原因是UITableViewCells中的贪婪图像加载。如果您的单元格包含图像,则应该进行某种形式的延迟加载。
如果您的数据来自API,那么检索应该是异步的,但我怀疑这是一个问题,因为它在iPhone上运行良好。如果在单元格中没有渲染图像,那么它可能是由CPU阻塞图形效果造成的,但我再次怀疑这是原因,因为在出列函数中可能不会发生延迟。