1

静态分析器通知我以下代码可能存在泄漏。我不明白怎么会有泄漏的空间。此外,我不明白分析器如何在整个项目中如此有用,但却错过了这么简单的东西。

我的假设是分析器是正确的,我正在泄漏。但是怎么做?

+ (McFieldDefinition *) freeformFieldDefinition {
    return [[[McFieldDefinition alloc] initWithText:@"0201FFM100"] autorelease];
}

谢谢!

4

1 回答 1

0

很抱歉发布这个问题。我终于在这里找到了答案: https ://stackoverflow.com/a/15668026/300986 。

问题出在我的 init 方法中:

- (id) initWithText:(NSString *)text {
    if (!text) return nil;
    if ([text length] < 7) return nil;
    self = [self init];
    if (self) {
        // do stuff
    }
    return self;
}

如果我不喜欢 text 变量,那两个保护子句将返回 nil。到那时,self 已经被分配了,所以它是 Analyzer 1,bmauter 0。

这是我的新版本:

- (id) initWithText:(NSString *)text {
    self = [self init];
    if (!self) return nil;

    if (!text || [text length] < 7) {
        [self release];
        return nil;
    }

    // do stuff

    return self;
}
于 2013-04-16T14:11:58.923 回答