我正在尝试理解为什么在一个非常基本的UIImage和UIImageView实现中会有内存泄漏。
在这种情况下,我没有使用ARC (正确禁用)。
我的代码非常简单:
UIImage *image = [UIImage imageNamed:@"my_image.jpg"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
[[self view] addSubview:imageView];
[imageView release];我在UIViewController的viewDidLoad:方法中实现了这段代码。
通过调用UIImage的方法imageNamed:,我知道我将获得一个不属于我的对象/一个自动释放对象。此对象也将由紧接着实例化的UIImageView对象保留。所以我拥有的唯一对象是UIImageView对象。
在使用内存泄漏工具运行此应用程序后,我得到了以下报告:

我听说了缓存系统的运行,但我不应该有内存泄漏,因为一些数据被缓存。
以下是对带有缓存解释的答案的引用:https://stackoverflow.com/a/2930567/1154501
提前谢谢你!
编辑:也尝试了ARC,我得到了同样的问题。
发布于 2013-12-18 05:40:37
[UIImage imageNamed:]由操作系统管理。释放通过此方法创建的UIImage可能会释放已分配的内存。如果你有很多图片或用户生成的内容,你应该使用[UIImage imageWithContentsOfFile:]或[UIImage imageWithData:]。
如果你用UIImage imageNamed:创建了太多的图片,你的应用程序可能会因为内存使用而被iOS杀死。我制作了一个示例应用程序来证明这一点,在这里可以看到更多:iOS UIImage storage formats, memory usage and encoding / decoding
发布于 2013-10-18 06:08:48
您是否尝试打开“扩展详细信息”右侧面板并查找内存泄漏的确切行?
你的代码是好的,我的观点是泄漏在其他地方。
https://stackoverflow.com/questions/19437285
复制相似问题