【问题标题】:Static Analyzer says I have a leak....why?静态分析仪说我有泄漏......为什么?
【发布时间】:2011-01-11 21:48:56
【问题描述】:

我认为这段代码应该没问题,但静态分析器不喜欢它。我不知道为什么,希望有人能帮助我理解。代码工作正常,分析器结果让我很困惑。

Coin *tempCoin = [[Coin alloc] initalize];
self.myCoin = tempCoin;
[tempCoin release];

Coin 是一个通用的NSObject,它有一个 initalize 方法。 myCoin 是当前视图的属性,类型为Coin。我假设它告诉我我正在泄漏tempCoin

在我看来,.h 我已将 myCoin 设置为具有 nonatomic,retain 的属性。

我已尝试自动发布代码以及此正常版本,但静态分析器继续说:
1. 方法返回一个具有 +1 保留计数的 Objective-C 对象(拥有引用)
2. 在第 97 行分配的对象在此之后不再被引用,并且保留计数为 +1(对象泄漏)

第 97 行是我显示的第一行。

【问题讨论】:

    标签: iphone memory-leaks clang-static-analyzer


    【解决方案1】:

    因为静态分析器正在寻找init,而不是initialize。它看到后者并假设[Coin alloc] 返回的对象返回的对象与initialize 不同,因此泄漏了第一个对象。

    将方法名称更改为init,静态分析器将不再报告泄漏。

    【讨论】:

    • 谢谢。做到了。啊啊啊...编译时没有警告的代码。
    猜你喜欢
    • 2011-03-11
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多