问题描述
|
我正在研究Stephen Kochan的Objective-C编程(要承认我是一个完整的初学者)。
我当前的程序是分数计算器。我有加,减,乘和除法。 Instruments告诉我它们都在泄漏(只有一点点,但这是一个很小的程序。)
这是减法的定义(其余方法非常相似):
-(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];
}
有想法堵漏吗?提前谢谢。
另外,我在网站上四处寻找其他解释,但可悲的是,我认为没有人问过那么基本的问题。
解决方法
问题在于:
return result;
[result release];
never2ѭ不会发送到result
,因为return
之后的任何语句都不会执行。这样的语句称为无效代码。
您应该自动释放对象,例如:
return [result autorelease];
请注意,您应使用-autorelease
而不是-release
,因为-release
会立即取消分配result
,这不是您想要的。另一方面,自动释放的对象在将来的某个时候释放,特别是在耗尽相应的自动释放池时。
,更换:
return result;
[result release];
带有:
return [result autorelease];