我试图理解为什么我在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。
使用Memory Leaks Instruments运行此应用程序后,我收到了此报告:
我听说过运行的缓存系统但我不应该有内存泄漏,因为有些数据是缓存的。
以下是对缓存说明的答案的引用: https://stackoverflow.com/a/2930567/1154501
提前谢谢!
编辑:也尝试使用ARC,我遇到了同样的问题。
答案 0 :(得分:7)
[UIImage imageNamed:]
由操作系统管理。释放从此方法创建的UIImage可能会释放已分配的内存。如果您有大量图片或用户生成的内容,则应使用[UIImage imageWithContentsOfFile:]
或[UIImage imageWithData:]
。
如果您使用[UIImage imageNamed:]创建了太多图像,则由于内存使用情况,您的应用可能会被iOS杀死。我制作了一个示例应用程序来向我自己证明这一点,请在此处查看更多内容:iOS UIImage storage formats, memory usage and encoding / decoding
答案 1 :(得分:0)
您是否尝试打开“扩展详细信息”右侧面板并查找内存泄漏的确切行?
您的代码没问题,我的意见是漏洞在其他地方。