目标C中的泄漏方法

cta*_*art 3 methods memory-leaks objective-c

我正在研究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];
}
Run Code Online (Sandbox Code Playgroud)

想堵塞泄漏?提前谢谢.

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

小智 8

问题在于:

return result;
[result release];
Run Code Online (Sandbox Code Playgroud)

-release永远不会发送,result因为之后的任何语句return都没有执行.这些语句称为死代码.

你应该自动释放你的对象,例如:

return [result autorelease];
Run Code Online (Sandbox Code Playgroud)

请注意,您应该使用-autorelease而不是-release因为-release会导致立即释放result,这不是您想要的.另一方面,自动释放的对象在将来的某个时刻被释放 - 特别是在相应的自动释放池被耗尽时.

  • 并回答明显的后续行动"嗯,何时相应的自动释放池耗尽?":在大多数情况下,这将是AppKit/UIKit框架在每次运行开始时创建的顶级自动释放池.事件循环和排水管结束. (2认同)