UITableView性能问题

时间:2010-10-08 15:44:53

标签: iphone objective-c ipad

我有一个UITableView,它从服务器获取数据并每1秒更新一次(使用performSelectorOnMainThread)。由于这会阻塞主线程有时不容易滚动表格并且对用户来说很痛苦。此外,我也无法减少刷新间隔。

此问题的可能解决方案是什么?

4 个答案:

答案 0 :(得分:1)

我只会在数据发生变化时刷新可见单元格,而其他单元格会随着它们的出现而刷新,因此它比更新孔UITablaView

更少消耗

您可以使用(来自UITableView)获取可见单元格:

- (NSArray *)visibleCells

您可以使用UITableViewDelegate Protocol

更新剩余的单元格
– tableView:willDisplayCell:forRowAtIndexPath:

我认为这应该会加快一点。

答案 1 :(得分:0)

将数据保存在可变数组或类似结构中,然后使用NSURLConnection异步更新该数组。在NSURLConnection完成后,您可以在tableview上调用reloadData来重绘表。

你可能只是在你喜欢的任何时间间隔从NSTimer调用NSUrlConnection。

答案 2 :(得分:0)

而不是调用NSThread调用的performSelectorOnMainThread函数

detachNewThreadSelector函数。这样你的线程就不会阻塞主线程

[NSThread detachNewThreadSelector:@selector(aMethod :) toTarget:[MyObject class] withObject:nil];

在toTarget:方法中你可以编写self而不是[MyObject class]

也在实现选择器中编写@synchronize(self),例如。

- (无效)amethod方法 {  @synchronize(self){

     //write your whole code here 
  }

}

我在我的应用程序中完成了同样的工作

答案 3 :(得分:0)

将GCD用于队列(串行或全局队列)。这是苹果推荐的方式。

dispatch_async(dispatch_get_main_queue(), ^{


//do UI updates

});