iPhone应用程序内存泄漏与NSMutableArray中的UIImages

时间:2014-01-29 15:53:31

标签: ios iphone objective-c memory-leaks uiimage

我有一个包含图像的NSMutableArray。然后我有一个图像视图,显示该数组的图像。但是,每次加载图像视图时,我都会收到大量内存泄漏。我不知道如何纠正这一点。我在Xcode 5.0.2中使用ARC。

_image1 = [UIImage imageNamed:@"FirstImage.png"];

imagearray = [[NSMutableArray alloc] init];

[imagearray addObject:_image1];

_imageview1 setImage:[imagearray objectAtIndex:0]];

2 个答案:

答案 0 :(得分:4)

内存泄漏问题可能是因为UIImage没有变为零。为此,您必须使用alloc初始化UIImage,并在将其添加到数组后,将其设置为nil。您可以通过这种方式防止内存泄漏:

UIImage *image1 =[[UIImage alloc]initWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"FirstImage" ofType:@"png"]];
[imagearray addObject:image1];
_imageview1 setImage:[imagearray objectAtIndex:0]];
image1 =nil;

如果有效,请告诉我。谢谢:))

答案 1 :(得分:1)

  

来自apple doc:   +(UIImage)imageNamed:方法在系统缓存中查找具有指定名称的图像对象,并返回该对象(如果存在)。   如果匹配的图像对象尚未在缓存中,则此方法   从指定文件加载图像数据,缓存它,然后   返回结果对象。

     

如果您的图像文件只显示一次并希望显示   确保它不会被添加到系统的缓存中,你应该这样做   而是使用imageWithContentsOfFile创建您的图像:这将   可能会将您的一次性图像保留在系统图像缓存之外   改善应用的内存使用特性。

所以作为一个建议,如果你用imageWithContentsOfFile替换imageNamed:以避免缓存,你的内存占用应该提高