我想显示一些图像,当图像不可用时,我想显示一个默认的图像。当使用分析功能时,我收到关于潜在泄漏的警告。我确实理解当使用imageNamed没有分配内存时,有什么好的解决方法?下面是我的代码的一部分
if (!isMyFileThere){
image = [UIImage imageNamed:@"default.png"];
}
else{
image = [[UIImage alloc] initWithContentsOfFile:pngFilePath];
}发布于 2011-08-24 23:05:01
这是自动发布的
image = [UIImage imageNamed:@"default.png"];这不是
image = [[UIImage alloc] initWithContentsOfFile:pngFilePath];您需要这样做:
image = [[[UIImage alloc] initWithContentsOfFile:pngFilePath] autorelease];规则是,如果您的方法名称以alloc、new、copy或muteableCopy开头,则您拥有它,并需要自己释放它,使用release或autorelease。其他任何东西都不是你的,所以你不能释放它。
如果在对象上调用retain,则必须对其执行相同次数的release (或autorelease) :)
发布于 2011-08-24 23:05:44
你已经做了一个分配,现在你必须释放它,如果你不这样做,这是一个潜在的泄漏。另一个语句是image = [[UIImage alloc] initWithContentsOfFile:pngFilePath];释放的对象。
发布于 2011-08-24 23:12:39
如果您想要保留对象,直到您手动释放它,您应该使用保留,autorelease将对象添加到当前NSAutorelease池中,该池在每次运行循环迭代结束时被排出。如果你试图使用一个释放的对象,你的程序将会崩溃。
在iOS 5.0中,如果您启用了ARC,您将不再需要使用“保留”、“自动释放”或“释放”。这些是由编译器自动添加的。
https://stackoverflow.com/questions/7177700
复制相似问题