gpt4 book ai didi

ios - 从相机胶卷读取UIImage时内存分配过多的原因(内存泄漏?)

转载 作者:行者123 更新时间:2023-12-01 17:21:35 25 4
gpt4 key购买 nike

我尝试修改FGallery(https://github.com/gdavis/FGallery-iPhone)。
我需要它来读取相机胶卷中的图像,但是会发生内存泄漏。

旧代码(路径是文件位置):

@autoreleasepool {

NSString *path = [NSString stringWithFormat:@"%@/%@", [[NSBundle mainBundle] bundlePath],_thumbUrl];
_thumbnail = [UIImage imageWithContentsOfFile:path];
_hasThumbLoaded = YES;
_isThumbLoading = NO;
[self performSelectorOnMainThread:@selector(didLoadThumbnail) withObject:nil waitUntilDone:YES];
}

我的代码(路径是断言库URL):
@autoreleasepool {

ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset) {
ALAssetRepresentation *rep = [myasset defaultRepresentation];
CGImageRef iref = [rep fullResolutionImage];
if (iref) {
_thumbnail = [UIImage imageWithCGImage:iref];
_hasThumbLoaded = YES;
_isThumbLoading = NO;
[self performSelectorOnMainThread:@selector(didLoadThumbnail) withObject:nil waitUntilDone:YES];
}
};

ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *myerror) {
NSLog(@"booya, cant get image - %@",[myerror localizedDescription]);
};

NSURL *asseturl = [NSURL URLWithString:_thumbUrl];
[assetslibrary assetForURL:asseturl
resultBlock:resultblock
failureBlock:failureblock];
}
}

对于相同的图像,我得到了很大的内存分配(-didReceiveMemoryWarning),这会使程序在我的代码中崩溃,但不会在使用原始代码时崩溃。

有什么想法吗?

附言我使用ARC,并为FGallery进行了自动转换。它适用于本地应用程序图像,但如上所述,我无法使其适用于相机胶卷图像。

编辑1:程序崩溃

最佳答案

我想我明白了。
“ALAssetsLibraryAssetForURLResultBlock结果块”在另一个线程上运行。
因此“@autoreleasepool”不适用于它。 (每个线程都有它自己的自动释放池)。因此,由于大量的“自动释放”分配(图像),内存占用量要高得多。
在该块中添加“@autoreleasepool”可以阻止崩溃和大内存分配。

简而言之:

ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset) {
@autoreleasepool {
ALAssetRepresentation *rep = [myasset defaultRepresentation];
CGImageRef iref = [rep fullResolutionImage];
if (iref) {
_thumbnail = [UIImage imageWithCGImage:iref];
_hasThumbLoaded = YES;
_isThumbLoading = NO;
[self performSelectorOnMainThread:@selector(didLoadThumbnail) withObject:nil waitUntilDone:YES];
}
}
};

感谢所有答复。

关于ios - 从相机胶卷读取UIImage时内存分配过多的原因(内存泄漏?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9400294/

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