如何在后台加载UICollectionView单元格

时间:2014-04-14 22:24:08

标签: ios objective-c uitableview uicollectionview uicollectionviewcell

我有一个显示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时暂停。显然,我希望集合视图完全平滑,并在每个单元格准备就绪时显示每个单元格的视图,而不会阻塞主线程。

对于图像而言,这很容易且记录良好,但我很难对视图控制器的视图做同样的事情。

1 个答案:

答案 0 :(得分:1)

尽可能多地重用您的控制器和查看基础架构。表和集合视图有一个原因可以提供单元重用 - 拆卸和娱乐是很昂贵的。

集合视图内存管理是重用的艺术。通过不重用控制器及其视图,您正在破坏单元重用(因为每次都会破坏并重新创建90%的单元格内容。