如何优化UICollectionView图像加载?

时间:2014-04-02 14:19:09

标签: ios optimization uicollectionview

我在文件系统中有多个.jpg个文件,需要在每个单元格UIImageView中显示。每张图片小于200Kb。分配单元格图像的代码如下:

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath;
{
    BookCell *cell = [cv dequeueReusableCellWithReuseIdentifier:@"BookCell" forIndexPath:indexPath];

    NSString *coverName = [[_dataSource objectAtIndex:indexPath.row] objectForKey:@"cover"];
    NSString *cover = [[NSBundle mainBundle] pathForResource:coverName ofType:@"jpg" inDirectory:@"covers"]; 
    cell.coverImage.image = [[UIImage alloc] initWithContentsOfFile:cover];
    ...    
    return cell;
}

体验并不完美,特别是在iPad 2上。在滚动期间,视图是免费的。我怀疑这是由于图像加载。我该如何优化呢?

2 个答案:

答案 0 :(得分:0)

代码看得很清楚,但也许图像大小确实比图像视图边界大。
如果它减少了捆绑中图像的大小,或者如果您将它们带到其他位置,请尝试使用正确的大小将它们预先缓存在目录中。
ScrollView性能取决于很多因素,您的视图中是否有很多透明度?这些影响滚动性能非常糟糕。

答案 1 :(得分:0)

我认为你只需要一个图像缓存。您可以使用SDWebImage。 SDWebImage Class。 SDWebImage是一个 异步映像下载器,缓存支持为UIImageView类。

正如您在其提供的文档中所看到的那样:

  • UIImageView类别,将Web图像和缓存管理添加到 Cocoa Touch框架

  • 异步图片下载器

  • 使用自动缓存到期处理的异步内存+磁盘映像缓存

  • 动画GIF支持

  • WebP格式支持

  • 背景图片解压缩

  • 保证同一网址不会被多次下载

  • 保证不会一次又一次地重试虚假网址

  • 保证主线程永远不会被阻止

  • 性能!

  • 使用GCD和ARC

  • Arm64支持