PhotoKit相册的性能优化

本文介绍了在实际项目中使用PhotoKit进行相册管理时的性能优化工作,针对获取高清原图导致的内存大幅上升问题,提出通过获取图片二进制流再转化为UIImage的方法来稳定内存。同时,利用PhotoKit的缓存机制,优化滑动相册时的内存使用,提高滑动流畅性,详细展示了实现这一缓存方案的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有关PhotoKit的基础知识,参考我的另一篇博文: 优雅的创建一个相册管理类
这篇文章记录一下在实际项目中,自定义相册的优化工作。

之前的文章提到过,获取照片高清原图使用下面的方法:

    PHImageManager *manger = [PHImageManager defaultManager];

    PHImageRequestOptions * options = [[PHImageRequestOptions alloc] init];
    options.deliveryMode = PHImageRequestOptionsDeliveryModeFastFormat;
    options.synchronous = YES;
    options.resizeMode = PHImageRequestOptionsResizeModeFast;
    options.networkAccessAllowed = NO;

[manger requestImageForAsset:asset targetSize:PHImageManagerMaximumSize contentMode:PHImageContentModeDefault options:options resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
           //获取照片 result
}];

在实际的使用过程中,如果涉及多张照片循环获取原图,就会出现内存大幅度上升的问题。通过Allcation就行内存检测的时候,发现正是该方法会占用很大的内存。

经过查找资料和自己的验证后,发现可以通过下面的方法获取图片。这样内存会稳定,就不会引起这样内存的问题。

    [manger requestImageDataForAsset:asset options:options resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {
        UIImage *image = [UIImage imageWithData:imageData];
        //获取照片 image
    }];

该方法是获取先图片的二进制流,然后转化为UImage。


另外,对于滑动相册的时候,内存也会出现一定的增大,虽然不会造成明显的卡顿现象。
但官方也给出了PhotoKit的缓存机制接口,更好的优化内存,提升滑动的流畅性。

具体方法如下:

在当前拥有UICollectionView的视图控制器中:

@property (nonatomic, assign) CGRect previousPreheatRect;

@property (nonatomic, strong) PHCachingImageManager *imageManager;
- (PHCachingImageManager *)imageManager
{
    if (_imageManager == nil) {
        _imageManager = [PHCachingImageManager new];
    }

    return<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值