gpt4 book ai didi

ios - 使用照片框架请求照片时发生内存泄漏

转载 作者:行者123 更新时间:2023-12-01 16:03:48 25 4
gpt4 key购买 nike

我正在使用以下方法请求一些照片并将它们添加到一个数组中供以后使用:

-(void) fetchImages{

self.assets = [[PHFetchResult alloc]init];
PHFetchOptions *options = [[PHFetchOptions alloc] init];
options.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]];
self.assets = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:options];

self.photosToVideofy = [[NSMutableArray alloc]init];

CGSize size = CGSizeMake(640, 480);
PHImageRequestOptions *photoRequestOptions = [[PHImageRequestOptions alloc]init];
photoRequestOptions.synchronous = YES;

for (NSInteger i = self.firstPhotoIndex; i < self.lastPhotoIndex; i++)
{
PHAsset *asset = self.assets[i];
[[PHImageManager defaultManager] requestImageForAsset:asset targetSize:size contentMode:PHImageContentModeAspectFit options:photoRequestOptions resultHandler:^(UIImage *result, NSDictionary *info) {
if (result) {
[self.photosToVideofy addObject:result];


}
}];
}
NSLog(@"There are %lu photos to Videofy", (unsigned long)self.photosToVideofy.count);

}

当照片数量少于 50 时,这工作正常。在内存跳到 150-160mb 之后,我收到消息 Connection to assetsd was interrupted or assetsd died 并且应用程序崩溃。获得想要的 Assets 后,如何从内存中释放 Assets (PHFetchResult)?(我需要吗?)我希望能够添加多达 150 张照片。有任何想法吗?谢谢

最佳答案

您不应将 PHFetchResult 的结果放入数组中。 PHFetchResult 的想法是指向照片库中的许多图像,而不是将它们全部存储在 RAM 中,(我不确定它究竟是如何做到的)只需像数组一样使用 PHFetchResult 对象,它会为您处理内存问题。例如,将 collectionViewController 直接连接到 PHFetchResult 对象,并使用 PHImageManager 仅请求可见单元格等的图像。

来自苹果文档:“然而,与 NSArray 对象不同的是,PHFetchResult 对象会根据需要从照片库中动态加载其内容,即使在处理大量结果时也能提供最佳性能。” https://developer.apple.com/library/ios/documentation/Photos/Reference/PHFetchResult_Class/

关于ios - 使用照片框架请求照片时发生内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26755396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com