使用UICollectionView在iOS 9中实现100%的CPU使用率

时间:2015-10-11 09:53:30

标签: ios uitableview uicollectionview ios9

我有一个tableView,在每个单元格中都有一个collectionView。有时当我知道collectionViews中有新数据时,我会在collectionView上调用reloadData()。大多数情况下这个例程工作,但有时开始使用100%的CPU,内存使用量增加,GUI被阻止,并且应用程序将崩溃。如果我不重新加载collectionView,那么一切正常,只有collectionView中的内容无效。发生了什么,在iOS 8中从reloadData()拨打cellForRowAtIndexPath并不是问题。

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("movie") as! MovieTableViewCell

    //..

    if cell.rcvc == nil {

        let cvfl = UICollectionViewFlowLayout()
        cvfl.scrollDirection = .Horizontal
        cell.rcvc = RatingCollectionViewController(collectionViewLayout: cvfl)

        self.addChildViewController(cell.rcvc!)
        let v = cell.viewWithTag(5)!
        v.addSubview(cell.rcvc!.view)
        cell.rcvc!.didMoveToParentViewController(self)
        cell.rcvc!.view.frame = v.bounds
    }

    cell.rcvc!.movie = movie

    if enableReloadRatingCollectionViews {

        cell.rcvc!.collectionView!.reloadData() // <--- if I comment, not crashes
    }

    return cell
}

更新

我更新了我的代码,例如@dasblinkenlight建议,我不再从reloadData拨打cellforRowAtIndexPath,但现在在确定时拨打reloadData所有collectionView表单用户交互触发它。但它有时会崩溃,任何想法为什么?

itemTableViewController!.tableView.reloadData()
for sv in collectionViews.allObjects {

    (sv as! UICollectionView).reloadData()
}

enter image description here

1 个答案:

答案 0 :(得分:0)

我没有重新加载嵌套的collectionView,而是实现了configureCell方法,重置了单元格,而对于我调用configureCell的所有可见单元格。这是我的修复,因此无限循环可以避免。