1

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

 - (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;


}
4

1 回答 1

2

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

根据文档:

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

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

于 2013-07-03T12:32:32.213 回答