【发布时间】:2016-06-30 08:40:03
【问题描述】:
我有一个UITableView 作为我的应用程序的主要视图。这个UITableView 的内容是通过HTTP 请求作为JSON 从Web 加载的,一次5 项。此请求部分没有性能问题。
之后,将根据 JSON 数据的内容以编程方式生成单元格。例如,如果 JSON 表示一个单元格包含 1 个UILabel、1 个UITextField 和 1 个UIButton。我将这些添加为子视图以纠正UITableViewCell。细胞的初始状态也没有问题。
当您向下滚动时,会从 Web 加载新项目,这是触发“加载更多”功能的方法。
func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
let lastElement = data.jsonArray.count - 2
if indexPath.row == lastElement {
page += 1
getFeed()
}
}
但是,当您向下滚动时,您会注意到小的冻结和滞后,这看起来很糟糕。我不知道为什么会出现这些小冻结。
这就是现在的样子。我是在模拟器上录的,但在真机上就差很多了。
我不知道我应该在这里做什么。有什么建议吗?谢谢。
【问题讨论】:
-
你能把代码贴在
cellForAtIndexPath:吗? -
它很长很复杂。
-
getFeed会在用户经常滚动到最后一个索引时调用多次。如果方法已经在执行,你应该阻止调用它。 -
好的!您可以通过以下方式找到导致性能不佳的原因:删除
cell forRowAtIndexPath:中的所有业务代码,然后再次查看性能。如果性能仍然不好,那是因为cornerRadius,gradient,autolayout,...问题。否则,问题是因为您的业务代码持有主线程太久。您可以逐行取消注释代码,直到发现问题为止! -
似乎向单元格添加视图会导致性能问题。我目前从 cellforRowAtIndexPath 开头的单元格中删除所有子视图,然后添加它们。这是一种不好的方法吗?
标签: ios objective-c swift uitableview