gpt4 book ai didi

iphone - 将新图像加载到 UIImageView 中,之前图像的内存不会被释放

转载 作者:行者123 更新时间:2023-12-03 19:26:01 27 4
gpt4 key购买 nike

我的应用程序有一个包含三个 UIImageViews 的 View 。资源文件大约有 150 个图像,每个 .jpg 大约 24k。该应用程序将显示所有图像,但一次仅显示三张。

但是每次我单击按钮将另外三个图像加载到 UIImageViews 中时,Instruments 中的“Overall Bytes”列就会增加大约 700K,直到我最终收到内存不足警告,然后应用程序崩溃。不知何故,我每次加载三个图像所使用的内存没有被释放。

我用谷歌搜索并尝试了我所知道的各种方法来做到这一点,但没有成功,我需要帮助。

我已经尝试过这个:(此代码是加载另外三个图像的操作的一部分。这三个 ImageView 是 imgShownLeftimgShownMiddleimgShownRight 。这些是实例变量。我首先必须将 currentImage 放入所有三个 UIImageViews 中,然后将 previousImage 放入左侧和右侧的 nextImage :

NSString *strImageToSet = [[imgNamesArray objectAtIndex:currentImage] stringByAppendingFormat:@".jpg"];
UIImage *img = [UIImage imageNamed:strImageToSet];
[imgShownMiddle setImage:img];
[imgShownLeft setImage:img];
[imgShownRight setImage:img];

NSString *strPreviousImage = [[imgNamesArray objectAtIndex:previousImage] stringByAppendingFormat:@".jpg"];
img = [UIImage imageNamed:strPreviousImage];
[imgShownLeft setImage:img];

NSString *strNextImage = [[imgNamesArray objectAtIndex:nextImage] stringByAppendingFormat:@".jpg"];
img = [UIImage imageNamed:strNextImage];
[imgShownRight setImage:img];

然后我尝试了这个: 而不是:

    UIImage *img = [UIImage imageNamed:strImageToSet];

我用过:

    UIImage *img = [[UIImage alloc] initWithContentsOfFile:strImageToSet];

并以同样的方式将img分配给UIImageViews,然后 [img 发布];

然后我尝试了:

    UIImage *img = [[[UIImage alloc] initWithContentsOfFile:strImageToSet] autorelease];

然后我尝试了:

    img = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[imgNamesArray objectAtIndex:currentImage] ofType:@"jpg"]];

但在每种情况下,内存需求都会随着此操作的每次运行而增长。

我知道可以一次加载三张图像,而无需在内存中保存 150 张图像!我做错了什么?

感谢您的任何见解。/SD

最佳答案

我认为你想要的是使用

img = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[imgNamesArray objectAtIndex:currentImage] ofType:@"jpg"]];

进行加载(因为 UIImage imageNamed: 据说会进行一些您不想要的缓存),然后添加

[img release];

在每次 setImage 调用之后,因为 subview 应该保留图像,所以你会泄漏引用计数。

我本以为带有 autorelease 的第二个版本会正常工作,但说实话,Cocoa 内存管理规则仍然让我感到困惑,即使我很确定我知道我在做什么。我在做什么。

关于iphone - 将新图像加载到 UIImageView 中,之前图像的内存不会被释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1112928/

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