gpt4 book ai didi

ios - 使用 AlAssetsLibrary 读取 iPhone 相机胶卷时出现内存问题

转载 作者:行者123 更新时间:2023-11-29 04:07:49 25 4
gpt4 key购买 nike

我正在尝试从 iPhone 相机胶卷中获取最后一张照片。我使用以下代码:

UIImage* __block image = [[UIImage alloc] init];
ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init];

[library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup* group, BOOL* stop) {

[group setAssetsFilter:[ALAssetsFilter allPhotos]];

if ([group numberOfAssets] > 0) {
[group enumerateAssetsAtIndexes:[NSIndexSet indexSetWithIndex:[group numberOfAssets]-1] options:NSEnumerationConcurrent usingBlock:^(ALAsset* alAsset, NSUInteger index, BOOL* innerStop) {
if (alAsset) {
ALAssetRepresentation* rawImage = [alAsset defaultRepresentation];
image = [UIImage imageWithCGImage:[rawImage fullScreenImage]];
[self doTheJobWithImage:image];
// Inside doTheJobWithImage: a segue is also performed at the end
}
}];
}
} failureBlock:^(NSError* error) {
NSLog(@"Error: %@", [error localizedDescription]);
}];

它可以工作,但有缺陷(我正在使用 Instruments 和 Zombies 来调试它):

  • 它似乎会读取相机胶卷中的每张照片。那么,第一个问题:enumerateAssetsAtIndexes: 不只检索指定的图像(atIndexes)吗?我的代码有什么问题吗?
  • 除了之前的问题之外,当相机胶卷中有大量照片时,内存就会成为问题。如果太多,我的应用程序就会崩溃,或者如果它有效,似乎检索到的图像永远不会被释放,所以当我第二次或第三次调用此代码时,它无论如何都会由于内存泄漏而崩溃。所以第二个问题:如何强制我的代码在调用 doTheJobWithImage: 后释放所有内容?

我正在使用 xcode 4.6、ios 6 和 ARC。提前致谢。

最佳答案

几个小时后,我发现这里的代码没有任何问题。这是提取相机胶卷中最后一张照片的正确代码(如果有人需要它)。问题出在 doTheJobWithImage: 内部,我解决了它替换

[self doTheJobWithImage:image];

并将生成的图像存储在其他地方,然后在图片枚举完成后执行 doTheJobWithImage: 。这样说是为了以防万一其他人感兴趣。

关于ios - 使用 AlAssetsLibrary 读取 iPhone 相机胶卷时出现内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14920408/

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