这是我的pseduo代码:
- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"didEndDisplayingCell %@", indexPath );
if (collectionView == self.viewA) {
...
cities_in_viewB = [NSArray arrayWithArray:all_cities_subset];
__weak UICollectionView* weak_viewB = self.viewB;
dispatch_async(dispatch_get_main_queue(),^{
[weak_viewB reloadData];
});
}
}
调用reloadData
后,ios App似乎被冻结。为什么呢?
修改
根据Oleg Sobolev的回答,我重构了代码,发现问题与递归无关。正如您在示例代码中所看到的那样,viewB
正在进行重新加载调用。此didEndDisplayingCell
内的viewA不受影响。
发生的事情是我在代码中有一个while
循环(未显示),为viewB
准备一组新数据。退出条件写得很差。
但是,如果递归是一个问题,我仍然希望看到一个可能的解决方案。
答案 0 :(得分:3)
这是递归=)重新加载数据 - > itemAtIndex - >将显示 - >确实显示了
也许我在这个循环中失去了一些东西,但这并不重要。 reload data
调用did display
方法,您尝试在reload data
方法=)中调用did display
方法
修改强>
此答案对更新的问题不再有效。