【问题标题】:XCode analyzer give wrong "potential memory leak" issue?XCode 分析器给出错误的“潜在内存泄漏”问题?
【发布时间】:2011-12-13 08:50:26
【问题描述】:

我写了一个如下的函数来创建一个CGPath:

+(CGPathRef)CGPathCreateRoundrect:(CGRect)rect radius:(CGFloat)radius {
    CGMutablePathRef path = CGPathCreateMutable();
    ......
    CGPathCloseSubpath(path);
    return path;
}

分析器说第一行代码创建了一个可能泄露的对象。但我确实想在这个函数中创建一个新对象并将所有权转移给调用者。并且函数名称包含关键字“创建”。这是“分析器”的bug吗?

【问题讨论】:

    标签: iphone xcode memory-leaks


    【解决方案1】:

    分析仪在此处正常运行。所有权只能通过名为 copyinit 或其某些变体的方法转移。

    返回的对象应该是自动释放的。

    【讨论】:

    • 不要忘记 new 前缀。
    • @BradLarson:为什么不呢?其他人都这样做了。 ;)
    【解决方案2】:

    发生这种情况是因为根据编译器的理解,+() 方法将始终返回自动释放的变量,而您的情况并非如此。

    【讨论】:

    • 这对编译器来说是一个规则,即使你在调用者方法中释放它(编译器不知道!!)
    • @user1095341 不,我不认为这是正确的。在 Clang 静态分析器遵守的命名约定方面,类方法 (+) 的处理方式与实例方法 (-) 没有任何不同。正如 Williham 指出的那样,分析器要求您使用不以“alloc”、“new”、“copy”或“mutableCopy”为前缀的方法,如以下指南所述:developer.apple.com/library/mac/#documentation/cocoa/conceptual/…。作为类方法与实例方法在这里没有关系。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-13
    • 2011-10-16
    • 1970-01-01
    相关资源
    最近更新 更多