我正在研究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];
}有没有想过要堵住漏洞?提前谢谢你。
此外,我在网站上四处寻找另一种解释,但遗憾的是,我认为没有人问过这么基本的问题。
发布于 2011-05-26 14:04:58
问题在于:
return result;
[result release];-release永远不会发送给result,因为return之后的任何语句都不会执行。这样的语句被称为死代码。
你应该自动释放你的对象,例如:
return [result autorelease];请注意,您应该使用-autorelease而不是-release,因为-release会导致立即释放result,而这不是您想要的。另一方面,自动释放的对象在将来的某个时候释放-特别是当相应的自动释放池被排出时。
发布于 2011-05-26 14:10:52
替换:
return result;
[result release];通过以下方式:
return [result autorelease];https://stackoverflow.com/questions/6134336
复制相似问题