我有一个显示CatViewController视图实例的集合视图:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
CatCell* cell = [collectionView dequeueReusableCellWithReuseIdentifier:kCatCellId forIndexPath:indexPath];
[cell updateCat:[self.dataSource catAtIndex:indexPath.row]]; //catAtIndex will return a Cat Core Data object
return cell;
}
CatCell
看起来像这样:
- (void)prepareForReuse {
[super prepareForReuse];
[self.catVC.view removeFromSuperview];
self.catVC = nil;
}
- (void)updateCat:(Cat*)cat {
self.catVC = [[CatViewController alloc] initWithNibName:nil bundle:nil];
self.catVC.view.frame = self.bounds;
[self.contentView addSubview:self.catVC.view];
self.catVC.cat = cat;
}
self.catVC.cat
是导致CatViewController使用与Cat对象关联的所有视图数据进行自我配置的原因。问题是,当UICollectionView滚动时,它会在创建和显示新的CatViewController时暂停。显然,我希望集合视图完全平滑,并在每个单元格准备就绪时显示每个单元格的视图,而不会阻塞主线程。
对于图像而言,这很容易且记录良好,但我很难对视图控制器的视图做同样的事情。
答案 0 :(得分:1)
尽可能多地重用您的控制器和查看基础架构。表和集合视图有一个原因可以提供单元重用 - 拆卸和娱乐是很昂贵的。
集合视图内存管理是重用的艺术。通过不重用控制器及其视图,您正在破坏单元重用(因为每次都会破坏并重新创建90%的单元格内容。