[英]UIImage causing memory leaks
仪器告诉我,当我在应用程序中快速设置UIImageview
的图像名称时,正在分配大量内存。 我有一个UIImageView
,它在游戏的每一帧都更改其图像名称。 当使用僵尸检入工具进行分析时,该应用程序似乎一直在以惊人的速度不断获取活动字节。 有没有一种方法可以解除分配UIImageView
的当前图像以阻止其执行此操作? 我正在使用ARC。
我分配UIImageView
图像的代码如下:
aPlanet.image = [UIImage imageNamed:tempPlanetName];
其中aPlanet是UIImageView
而tempPlanetName
是图像的名称。 这称为每一帧。
[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.