使用imageNamed进行内存分配

时间:2011-08-24 15:01:49

标签: iphone imagenamed initwithcontentsoffile

我想显示一些图像,当图像不可用时我想显示默认图像。 使用分析功能时,我会收到有关潜在泄漏的警告。 我认为使用imageNamed时没有分配内存,这将是一个很好的解决方法吗? 请参阅下面的部分代码

if (!isMyFileThere){
    image = [UIImage imageNamed:@"default.png"];            
}
else{
    image = [[UIImage alloc] initWithContentsOfFile:pngFilePath];
}

3 个答案:

答案 0 :(得分:3)

这是自动释放的

 image = [UIImage imageNamed:@"default.png"];

这不是

image = [[UIImage alloc] initWithContentsOfFile:pngFilePath];

你需要这样做:

image = [[[UIImage alloc] initWithContentsOfFile:pngFilePath] autorelease];

规则是,如果您的方法名称以您拥有的allocnewcopymuteableCopy开头,并且需要自己发布,请使用{{1 }或release。其他任何东西都不是你的,所以你不能释放它。

如果您在某个对象上致电autorelease,则必须retain(或release)相同的次数:)

答案 1 :(得分:0)

image = [[UIImage alloc] initWithContentsOfFile:pngFilePath];你已经完成了一个分配,你现在必须释放它,如果你不这样做,这是一个潜在的泄漏。另一个语句是自动释放的对象。

答案 2 :(得分:0)

如果你想反对留下直到你手动释放它,你应该使用retain,autorelease将对象添加到当前的NSAutorelease池中,该池在每次运行循环迭代结束时被耗尽。如果您尝试使用释放的对象,程序将崩溃。

在iOS 5.0中

如果启用ARC,则不再需要使用“retain”,“autorelease”或“release”。那些由编译器自动添加。