我正在研究Stephen Kochan在Objective-C中的编程(这是为了承认我是一个完全的初学者)。
我目前的程序是分数计算器。我有加,减,乘和除法。乐器告诉我他们都在泄漏(只是一点点,但这是一个很小的程序。)
这是减法方法的定义(其余的采用非常相似的形式):
-(Fraction *) subtract: (Fraction *) f;
{
Fraction *result = [[Fraction alloc] init];
int resultNum, resultDenom;
resultNum = numerator * f.denominator - f.numerator * denominator;
resultDenom = denominator * f.denominator;
[result setTo: resultNum over: resultDenom];
return result;
[result release];
}
堵塞泄漏的想法?提前谢谢。
另外,我在网站上寻找另一种解释,但遗憾的是,我认为没有其他人问过任何这么基本的问题。
答案 0 :(得分:8)
问题在于:
return result;
[result release];
-release
永远不会发送到result
,因为return
之后的任何语句都不会被执行。这些陈述称为死代码。
你应该自动释放你的对象,例如:
return [result autorelease];
请注意,您应该使用-autorelease
而不是-release
,因为-release
会导致result
的立即释放,这不是您想要的。另一方面,自动释放的对象将在未来的某个时间点释放 - 特别是在相应的自动释放池耗尽时。
答案 1 :(得分:4)
替换:
return result;
[result release];
使用:
return [result autorelease];