0

Instruments 告诉我,当我在应用程序中快速设置 a 的图像名称时,正在分配大量内存UIImageview。我有一个UIImageView在我的游戏中每帧都会改变它的图像名称。当使用僵尸检查仪器进行分析时,该应用程序似乎不断以惊人的速度获得实时字节。有没有办法可以解除分配UIImageView当前图像以阻止它这样做?我正在使用 ARC。

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

aPlanet.image = [UIImage imageNamed:tempPlanetName];

其中 aPlanet 是UIImageView并且tempPlanetName是图像的名称。这被称为每一帧。

4

2 回答 2

4

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

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

如果您使用的是 arc,那么您无需担心释放这个新分配的 uiimage 对象,该对象是使用 initWithContentsOfFile: 方法创建的。

于 2013-01-04T09:55:52.833 回答
1

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

除了每帧使用新图像更新图像视图似乎有些不寻常之外,您应该研究加载图像的替代方法,您不需要超过一次 - 或者即使您这样做,当您需要对其生命周期进行更多控制时.

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

我希望这对您有所帮助,但对于每一帧,我怀疑您的性能是否会通过这种方法足够好,但如果需要,这可能是另一个问题的主题。

于 2013-01-04T09:38:05.103 回答