iOS 9和UICollectionView中奇怪的100%CPU使用率
我有一个tableView,每个单元格中都有一个collectionView。有时,当我知道collectionView中有新数据时,我会在collectionView上调用iOS 9和UICollectionView中奇怪的100%CPU使用率,ios,uitableview,uicollectionview,ios9,Ios,Uitableview,Uicollectionview,Ios9,我有一个tableView,每个单元格中都有一个collectionView。有时,当我知道collectionView中有新数据时,我会在collectionView上调用reloadData()。大多数时候,这个例程都能正常工作,但有时会开始使用100%的CPU,内存使用量增加,GUI被阻塞,应用程序会崩溃。如果我不允许重新加载collectionView,那么所有工作都正常,只有collectionView中的内容无效。在iOS 8中,从cellforrowatinexpath调用relo
reloadData()
。大多数时候,这个例程都能正常工作,但有时会开始使用100%的CPU,内存使用量增加,GUI被阻塞,应用程序会崩溃。如果我不允许重新加载collectionView,那么所有工作都正常,只有collectionView中的内容无效。在iOS 8中,从cellforrowatinexpath
调用reloadData()
没有问题
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
}
我没有重新加载嵌套的
集合视图
,而是实现了一个configureCell
方法,该方法重置单元格,并为我调用的所有可见单元格configureCell
。这是我的解决方案,因此无限循环可以避免。我没有重新加载嵌套的collectionView
,而是实现了一个configureCell
方法,该方法重置单元格,并为我调用的所有可见单元格configureCell
。这是我的解决方案,因此无限循环可以避免。我完全误解了您的问题,我没有看到重新加载是针对UICollectionView
内部UITableViewCell
。我肯定这里会有一些时间问题,但我之前的建议是不相关的。我很确定你的崩溃是由溢出堆栈的无限递归引起的。在我意识到调用reloadData
是在一个完全不同的视图控制器上完成之前,我也这么想。OP在每个单元格内都有一个集合视图。我不确定您是否看到了,但您可能想看一看,因为它解释了可能与您正在做的事情相关的事情。嗯,堆栈跟踪中似乎没有第二方代码,甚至不是堆栈溢出。我完全误解了您的问题,我没有看到重新加载是针对UICollectionView
内部的UITableViewCell
。我肯定这里会有一些时间问题,但我之前的建议是不相关的。我很确定你的崩溃是由溢出堆栈的无限递归引起的。在我意识到调用reloadData
是在一个完全不同的视图控制器上完成之前,我也这么想。OP在每个单元格内都有一个集合视图。我不确定您是否看到过,但您可能想看一看,因为它解释了可能与您正在做的事情相关的内容。嗯,堆栈跟踪中似乎没有第二方代码,甚至也不是堆栈溢出。
itemTableViewController!.tableView.reloadData()
for sv in collectionViews.allObjects {
(sv as! UICollectionView).reloadData()
}