UIImage导致内存泄漏

时间:2013-01-04 08:24:53

标签: objective-c ios memory-leaks

当我在我的应用中快速设置UIImageview的图像名称时,乐器告诉我正在分配大量内存。我有一个UIImageView,可以在游戏中的每一帧更改其图像名称。当使用僵尸检查仪器进行分析时,该应用程序似乎不断以极高的速率获得实时字节。有没有办法让我可以释放UIImageView的当前图像来阻止它这样做?我正在使用ARC。

我分配UIImageView图像的代码如下:

aPlanet.image = [UIImage imageNamed:tempPlanetName];

aPlanet是UIImageViewtempPlanetName是图像的名称。这称为每帧。

2 个答案:

答案 0 :(得分:4)

[UIImage ImageNamed:]方法将图像加载到图像视图中,并将此新创建的uiimage对象添加到自动释放池中。要摆脱这个问题,你应该使用 -

NSString * imgPath = [NSBundle mainbundle] pathForResource:@“imageName”ofType:@“png”]; aPlanet.image = [[UIImage alloc]] initWithContentsOfFile:imgPath];

如果你正在使用arc,那么你不需要为释放这个使用initWithContentsOfFile:方法创建的新分配的uiimage对象而烦恼。

答案 1 :(得分:1)

当您使用UIImage imageNamed:时,它将加载并缓存该图像文件。这是为了重复使用将在您的应用程序中多次使用的图标和其他图像资源。

除了每帧更新一个带有新图像的图像视图有点不寻常之外,您应该研究加载图像的其他方法,这些图像不需要多次 - 或者即使您需要更多控制也是如此在其生命周期中。

例如,请查看UIImage imageWithContentsOfFile:(此处记录:Apple Developer Library Reference)。它明确指出此方法不会对图像内容进行任何缓存。

我希望这会对你有所帮助,但是对于每一个框架我怀疑你的表现对于这种方法是否足够好,但如果需要,这可能是一个不同问题的主题。