多线程时无响应的UITableView

时间:2013-11-27 19:36:46

标签: ios objective-c multithreading performance uitableview

我正在使用UITableView来实现控制台输出之类的东西。我从不调用reloadData,只调用最后一行的insertRowsAtIndexPaths和reloadRowsAtIndexPaths。

我的问题是,当表格超过100行时,应用程序变得完全没有响应。我的应用程序喷出的大量数据少于一分钟。在此期间,UITableView的更新速度低于每秒帧数。

void Log(const char* str)
{
  [[NSOperationQueue mainQueue] addOperationWithBlock:^
  {
     // insertRowsAtIndexPaths or reloadRowsAtIndexPaths (both withRowAnimation:UITableViewRowAnimationNone)
  }
}

如果重要,我的表是用代码创建的:

if (cell == nil)
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    cell.textLabel.font = [UIFont fontWithName:@"Courier New" size:8];
}

我正在使用固定的rowHeight。

1 个答案:

答案 0 :(得分:3)

通常更有效的是在批处理中的单独线程上更新基础数据,并在主线程上定期调用[tableView reloadData](在定义的更新或时间之后)。

如果您有太多更新,那么始终在主要辅助线程之间切换会对性能造成不利影响。