滚动到表格视图的底部很慢 表视图包含大约25个项目 并且创建每个单元格有点复杂 因此,同时创建其中的25个大约需要200毫秒(相信我,我无法再进行任何优化)
基本上有两个选项可以滚动到表格视图的底部(我已经在整个堆栈中搜索了这个)
tableView.scrollRectToVisible
或tableView.setContentOffset
tableView.scrollToRowAtIndexPath
第一个选项的问题是,尽管它非常快并且它没有从tableView的顶部到底部重新创建每个单元格,但我需要调用一个新的主队列来使其工作。如果我在与调用tableView.reloadData()
的队列相同的队列中调用它,则在滚动tableview时会出现奇怪的延迟(日志显示正在重新创建大量单元格,我的意思是很多) 。让我补充说两个线程都是主线程。但我仍然必须致电dispatch_get_main_queue()
以摆脱那种尴尬的滞后。然而,新的主线程为初始负载增加了良好的延迟
这是我的代码:
func loadData(groupID: String){
self._chats = self._cache[groupID]!
_tableView.reloadData()
dispatch_async(dispatch_get_main_queue()) {
let rect = CGRect(x: 0, y: self._tableView.contentSize.height - self._tableView.bounds.height, width: self._tableView.contentSize.width, height: self._tableView.bounds.height)
self._tableView.scrollRectToVisible(rect, animated: false)
}
}
如果我不使用dispatch_get_main_queue(),那么tableView将是超级迟缓的。如果我使用它,那么执行时会有大约100毫秒的延迟,这使得初始加载变慢。
第二个选项也很慢,导致滚动到最后一个indexPath意味着在路上创建每个单元格。并且这不可能在后台发生并且在主线程中执行它意味着冻结UI大约200毫秒。
你可以建议任何其他解决方案,或者发现我正在做的事情有问题吗?我已经尝试了所有的东西,而且tableView还不够快。
答案 0 :(得分:0)
您可以使用Xcode Instruments之一的Time Profiler来了解您的应用堆栈的哪些流程。