UITableView中不寻常的高CPU使用率

时间:2017-03-28 13:21:43

标签: swift xcode uitableview core-data

我正在创建一个锻炼应用程序,我创建了一个UITableview来显示所有可用的练习(大约120个)。我正在使用NSFetchedResultsController从CoreData获取数据。我遇到的问题是当我滚动表格时,我的CPU使用率非常高。它的范围从50%-100%,具体取决于我滚动的速度。

这是我的行的单元格:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? ExerciseCell else {fatalError("Couldn't load appropriate index path for custom cell")}

     let exercise = self.fetchedResultsController.object(at: indexPath)
     cell.exerciseTitle.text = exercise.name

     if let getImage = exercise.image2 {
            let image = UIImage(data: getImage as Data)

                cell.exerciseImage.image = image

        } else {
            cell.exerciseImage.image = nil
        }

    return cell
}

我不确定它是否与我如何转换图像有关?或者我如何设置CoreData?任何帮助都是极好的。感谢。

1 个答案:

答案 0 :(得分:0)

似乎你可能在UIImage上做了昂贵的工作。

为了实现无缝滚动,您应遵循一些指导原则。

一个拇指规则:尝试尽可能快地使tableView:cellForRowAtIndexPath方法返回单元格实例

  • 线程:尝试在后台线程而不是主线程ex中进行提取或任何计算。在这里,您正在创建UIImage实例
  • 渲染:请勿在{{1​​}}中执行数据绑定,而是执行步骤tableView:cellForRowAtIndexPath
  • 动画:有些眼睛打开核心图形性能问题。请参阅:http://asyncdisplaykit.org/docs/corner-rounding.html
  • 缓存:创建自己的缓存机制,效果很好。即
    • 访问c​​oreData结果的更好方法,以便之后可以快速访问
    • 细胞的高度计算
  • 对于动态高度单元格,请不要使用绑定数据初始化单元格实例以获取其高度,而是使用基于传递的宽度和数据返回高度的类方法来显示(单元格的适配器)