- (void)viewDidLoad {
[super viewDidLoad];
landscape.image = [UIImage imageNamed:@"tenerife1.png"];
}
我将新UIImage
分配给UIImageView
对象的image属性。我不确定这是否会导致内存泄漏?
答案 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"];
由于这些图像倾向于填满内存,而不会被释放。