首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Objective C中的泄漏方法

Objective C中的泄漏方法
EN

Stack Overflow用户
提问于 2011-05-26 14:02:28
回答 2查看 203关注 0票数 3

我正在研究Stephen Kochan在Objective-C中的编程(承认我是一个完全的初学者)。

我现在的程序是一个分数计算器。我有加法、减法、乘法和除法方法。仪器告诉我它们都在泄漏(只有一点点,但这是一个很小的程序)。

下面是减法的定义(其余的都遵循非常类似的形式):

代码语言:javascript
运行
复制
-(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];
}

有没有想过要堵住漏洞?提前谢谢你。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-26 14:04:58

问题在于:

代码语言:javascript
运行
复制
return result;
[result release];

-release永远不会发送给result,因为return之后的任何语句都不会执行。这样的语句被称为死代码。

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

代码语言:javascript
运行
复制
return [result autorelease];

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

票数 8
EN

Stack Overflow用户

发布于 2011-05-26 14:10:52

替换:

代码语言:javascript
运行
复制
return result;
[result release];

通过以下方式:

代码语言:javascript
运行
复制
return [result autorelease];
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6134336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档