目标C中的泄漏方法

时间:2011-05-26 06:02:28

标签: objective-c methods memory-leaks

我正在研究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];
}

堵塞泄漏的想法?提前谢谢。

另外,我在网站上寻找另一种解释,但遗憾的是,我认为没有其他人问过任何这么基本的问题。

2 个答案:

答案 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];