我想显示一些图像,当图像不可用时我想显示默认图像。 使用分析功能时,我会收到有关潜在泄漏的警告。 我认为使用imageNamed时没有分配内存,这将是一个很好的解决方法吗? 请参阅下面的部分代码
if (!isMyFileThere){
image = [UIImage imageNamed:@"default.png"];
}
else{
image = [[UIImage alloc] initWithContentsOfFile:pngFilePath];
}
答案 0 :(得分:3)
这是自动释放的
image = [UIImage imageNamed:@"default.png"];
这不是
image = [[UIImage alloc] initWithContentsOfFile:pngFilePath];
你需要这样做:
image = [[[UIImage alloc] initWithContentsOfFile:pngFilePath] autorelease];
规则是,如果您的方法名称以您拥有的alloc
,new
,copy
或muteableCopy
开头,并且需要自己发布,请使用{{1 }或release
。其他任何东西都不是你的,所以你不能释放它。
如果您在某个对象上致电autorelease
,则必须retain
(或release
)相同的次数:)
答案 1 :(得分:0)
image = [[UIImage alloc] initWithContentsOfFile:pngFilePath];
你已经完成了一个分配,你现在必须释放它,如果你不这样做,这是一个潜在的泄漏。另一个语句是自动释放的对象。
答案 2 :(得分:0)
如果你想反对留下直到你手动释放它,你应该使用retain,autorelease将对象添加到当前的NSAutorelease池中,该池在每次运行循环迭代结束时被耗尽。如果您尝试使用释放的对象,程序将崩溃。
在iOS 5.0中如果启用ARC,则不再需要使用“retain”,“autorelease”或“release”。那些由编译器自动添加。