6

我试图理解为什么我在 UIImage 和 UIImageView 的一个非常基本的实现中存在内存泄漏。

在这种情况下,我没有使用 ARC(正确禁用)。

我的代码非常简单:

UIImage *image = [UIImage imageNamed:@"my_image.jpg"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
[[self view] addSubview:imageView];
[imageView release];

我在viewDidLoad:UIViewController 的方法中实现此代码。

通过调用imageNamed:UIImage 的方法,我知道我会得到一个我不拥有的对象/一个自动释放对象。该对象也将被之后实例化的 UIImageView 对象保留。所以我拥有的唯一对象是 UIImageView 对象。

使用 Memory Leaks Instruments 运行此应用程序后,我有此报告:

在此处输入图像描述

我听说过运行的缓存系统,但我不应该有内存泄漏,因为缓存了一些数据。

这是对缓存解释的答案的参考: https ://stackoverflow.com/a/2930567/1154501

先感谢您 !

编辑:也尝试使用 ARC,我遇到了同样的问题。

4

2 回答 2

9

[UIImage imageNamed:]由操作系统管理。解除分配从此方法创建的 UIImage 可能会释放已分配的内存。如果您有很多图像或用户生成的内容,您应该使用[UIImage imageWithContentsOfFile:]or [UIImage imageWithData:]

如果您使用 [UIImage imageNamed:] 创建了太多图像,您的应用程序可能会因为内存使用而被 iOS 杀死。我制作了一个示例应用程序来向自己证明这一点,在此处查看更多信息:iOS UIImage storage formats, memory usage and encoding/decode

于 2013-12-17T21:40:37.353 回答
-1

您是否尝试打开“扩展详细信息”右侧面板并查找内存泄漏的确切行?

你的代码没问题,我认为泄漏在其他地方。

于 2013-10-17T22:08:47.927 回答