我有一个UITableView,它从服务器获取数据并每1秒更新一次(使用performSelectorOnMainThread)。由于这会阻塞主线程有时不容易滚动表格并且对用户来说很痛苦。此外,我也无法减少刷新间隔。
此问题的可能解决方案是什么?
答案 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
});