使用UICollectionView接收内存警告以查看图像

时间:2014-04-20 16:44:42

标签: ios objective-c uicollectionview alassetslibrary

我创建了一个UICollectionView来水平查看ALAssets。 ALAssets首先存储到名为assets的MutableArray中。然后集合View通过此方法显示那些Assets。

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

    cell.backgroundColor = [UIColor redColor];

    ALAsset *asset = self.assets[indexPath.row];
    ALAssetRepresentation *rep = [asset defaultRepresentation];
    CGImageRef iref = [rep fullResolutionImage];
    UIImage *largeimage = [UIImage imageWithCGImage:iref];
    cell.imageView.image = largeimage;

    return cell;
}

但是资产收集超过100张图片,应用程序为我提供内存警告。内存使用量也增加了50MB以上。如何摆脱这种巨大的内存使用?我在这里做错了什么?

2 个答案:

答案 0 :(得分:3)

你错过了你创建的CGImage的发布。

ALAsset *asset = self.assets[indexPath.row];
ALAssetRepresentation *rep = [asset defaultRepresentation]; 
CGImageRef iref = [rep fullResolutionImage]; //! creates
UIImage *largeimage = [UIImage imageWithCGImage:iref];
cell.imageView.image = largeimage;
CGImageRelease(iref); //! release

答案 1 :(得分:0)

您应该避免创建大小超过1024 x 1024的UIImage对象。 (Apple SDK指南) 我猜是因为你试图一次加载大量的大图像。

因此,如果您只想在主集合视图中显示图像,则可以使用ALAsset类的缩略图图像。

当用户触摸其中一张图片时,请显示“fullResolutionImage”'那个时候。