我创建了一个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以上。如何摆脱这种巨大的内存使用?我在这里做错了什么?
答案 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”'那个时候。