繁体   English   中英

UIImage导致内存泄漏

[英]UIImage causing memory leaks

仪器告诉我,当我在应用程序中快速设置UIImageview的图像名称时,正在分配大量内存。 我有一个UIImageView ,它在游戏的每一帧都更改其图像名称。 当使用僵尸检入工具进行分析时,该应用程序似乎一直在以惊人的速度不断获取活动字节。 有没有一种方法可以解除分配UIImageView的当前图像以阻止其执行此操作? 我正在使用ARC。

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

aPlanet.image = [UIImage imageNamed:tempPlanetName];

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

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

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

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

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

除了在每帧使用新图像更新图像视图似乎有些不寻常之外,您还应该研究加载图像的替代方法,这些图像不需要一次以上的加载,或者即使您需要,也可以在需要对其生命周期进行更多控制的情况下加载。

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

我希望这对您有帮助,但是对于每个框架,我都怀疑使用这种方法的性能是否足够好,但是如果需要,这可能是另一个问题的话题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM