【问题标题】:iPhone app memory leak with UIImages in NSMutableArrayiPhone 应用程序内存泄漏与 NSMutableArray 中的 UIImages
【发布时间】:2014-01-29 15:53:31
【问题描述】:

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

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

imagearray = [[NSMutableArray alloc] init];

[imagearray addObject:_image1];

_imageview1 setImage:[imagearray objectAtIndex:0]];

【问题讨论】:

  • 这段代码在哪里,这是在某个块中吗?请添加更多代码...!
  • 内存泄漏怎么看?
  • 在调试导航器上 - xcode 中的内存报告。
  • 视图中有多少张图片可见?
  • 它是 ARC。有 5 张图片可见。

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


【解决方案1】:

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

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

请让我知道它是否有效。谢谢:)

【讨论】:

    【解决方案2】:

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

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

    因此作为建议,如果您将 imageNamed: 替换为 imageWithContentsOfFile: 以避免缓存,您的内存占用应该会有所改善

    【讨论】:

    • 我已经尝试过了,但是泄漏来自 setImage,而不是 imageNamed 部分。
    猜你喜欢
    • 2012-07-29
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 2014-02-06
    相关资源
    最近更新 更多