这种图像分配会导致内存泄漏吗?

时间:2009-04-01 16:33:23

标签: iphone memory memory-management memory-leaks

- (void)viewDidLoad {
    [super viewDidLoad];
    landscape.image = [UIImage imageNamed:@"tenerife1.png"];
}

我将新UIImage分配给UIImageView对象的image属性。我不确定这是否会导致内存泄漏?

4 个答案:

答案 0 :(得分:6)

不,不应该。设置新图像时应该自动释放旧图像,“imageNamed”方法使用autorelease,所以你应该没问题。

答案 1 :(得分:4)

嘿考虑到imageNamed有严重的内存问题,因为你失去了对其缓存的控制 - 即:一旦你完成了你的图像,你就无法回收那个内存。快速谷歌搜索会让你知道有多少人遇到imageNamed

的问题

我正在参加苹果iphone技术讲座,那个发表演讲的人确认了同样该死的东西 - 他建议使用imageWithContentsOfFile而不是imageNamed

如果你只有几个小图片,那么就好了,否则使用imageWithContentsOfFile,即使它有点慢 - 并实现你自己的缓存逻辑 - 检查这个如何做的很棒的链接here

答案 2 :(得分:1)

这取决于image属性的定义方式。如果它被定义为retain或者我认为,即使是copy,也应该没问题。如果将程序定义为assign,您最终会尝试引用已释放的内存并使程序崩溃。

答案 3 :(得分:0)

通常不是,但这取决于你如何定义landscape.image。见上面的帖子。使用大量的这些时要小心:

[UIImage imageNamed:@"tenerife1.png"];

由于这些图像倾向于填满内存,而不会被释放。