一个明显的泄漏,但clang静态分析仪没有检测到,为什么?

时间:2013-04-24 05:15:48

标签: objective-c memory-leaks clang clang-static-analyzer

我写了一些像这样的代码,

- (NSString*) caleSignParam:(NSMutableArray*)postData
{
    NSMutableArray* keyArray = [[NSMutableArray alloc] initWithCapacity:50];

    ......
    NSArray* sortedKeys = [keyArray sortedArrayUsingComparator:
                       (NSComparator)^(NSString *obj1, NSString *obj2) {
                           return [obj1 compare:obj2 options:NSLiteralSearch];
                       }];
    ......


    NSString* signStr = aString;

    return signStr;
}

我忘了释放keyArray,并且使用非ARC,但是当我点击Xcode菜单上的“Analyze”时,它没有检测到keyArray的泄漏。

如果我评论“NSArray * sortedKeys = ...”这一行,它可以检测到keyArray的泄漏。

我想知道静态分析仪有什么问题。

我非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

重要的是要了解静态分析仪并不总是正确的,也不总是不正确的。它可能会引发误报和漏报。但是,默认设置使得误报的可能性最小。在这种特殊情况下,我猜测分析器没有足够的数据来明确决定keyArray会发生什么