我在UICollectionView中加载大量图像时性能不佳

时间:2013-07-03 12:22:47

标签: iphone ios optimization ios6 uicollectionview

我必须在UIcollectionView中显示大量图像,可能大于200.图像尺寸很大。但那里存在严重的性能问题。滚动变慢,有时会崩溃。我不知道什么是在这种情况下优化的最佳方法。 我有一个包含UIImageView的custo单元格,我在方法中加载图像:

 - (UICollectionViewCell *)collectionView:(UICollectionView *)CollectionView    cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
PhotoCollectionCell *cell = [CollectionView dequeueReusableCellWithReuseIdentifier:kCellReuseIdentifier forIndexPath:indexPath];

 if(cell==nil){

        NSLog(@"cell is nil");
    }



    NSLog(@"%@",NSStringFromCGRect(cell.frame));
    ImagesDb *imageObj = [folderImagesArr objectAtIndex:indexPath.row];

    ImagesDataDb *imageData = imageObj.data;



    cell.cellImage.image = imageData.orignalImage;




    UILabel *titleLabel = (UILabel *)[cell viewWithTag:100];
    [titleLabel setText:[NSString stringWithFormat:@"%d",indexPath.row]];



        }

    return cell;


}

1 个答案:

答案 0 :(得分:2)

你可以做的第一件事是限制在单元格中使用的图像的大小,因为现在你加载了全尺寸图像。如果您显示大小相等或更小的单元格的图像,最好的方法。

根据文档:

  

在内存不足的情况下,可以从UIImage对象中清除图像数据以释放系统上的内存。此清除行为仅影响UIImage对象内部存储的图像数据,而不影响对象本身。当您尝试绘制其数据已被清除的图像时,图像对象会自动从其原始文件重新加载数据。然而,这个额外的负载步骤可能会导致很小的性能损失。

     

您应该避免创建大于1024 x的UIImage对象   1024个大小。除了大量的内存这样的图像会   消耗,使用图像作为纹理时可能会遇到问题   在OpenGL ES中或将图像绘制到视图或图层时。这个尺寸   如果您正在执行基于代码的限制,则不适用   操作,例如调整大小超过1024 x 1024的图像   像素通过绘制到位图支持的图形上下文。事实上,你   可能需要以这种方式调整图像大小(或将其分成几个   较小的图像),以便将其绘制到您的一个视图。