首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用AlAssetsLibrary阅读iphone相机时的内存问题

使用AlAssetsLibrary阅读iphone相机时的内存问题
EN

Stack Overflow用户
提问于 2013-02-17 11:06:10
回答 1查看 868关注 0票数 0

我正试着从iphone相机卷上得到最后一张照片。我使用以下代码:

代码语言:javascript
运行
复制
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]);
}];

它可以工作,但有缺陷(我使用仪器和僵尸来调试它):

  • 它似乎能读到相机卷里的每一张照片。那么,第一个问题是: enumerateAssetsAtIndexes:只检索指定的图像(atIndexes)吗?我的密码怎么了?
  • 再加上以前的问题,当很多图片都在相机卷中时,内存就成了一个问题。如果我的应用程序太多的话会崩溃,或者,如果它起作用,那么检索到的图像似乎永远不会被释放,所以当我第二次或第三次调用这段代码时,它还是会因为内存泄漏而崩溃。因此,第二个问题:如何强制代码在调用doTheJobWithImage:之后释放所有内容?

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

EN

回答 1

Stack Overflow用户

发布于 2013-02-17 21:35:19

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

代码语言:javascript
运行
复制
[self doTheJobWithImage:image];

并将结果图像存储在其他地方,然后执行doTheJobWithImage:在完成图片枚举之后。说这些只是为了防止别人感兴趣。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14920408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档