静态分析器通知我以下代码可能存在泄漏。我不明白怎么会有泄漏的空间。此外,我不明白分析器如何在整个项目中如此有用,但却错过了这么简单的东西。
我的假设是分析器是正确的,我正在泄漏。但是怎么做?
+ (McFieldDefinition *) freeformFieldDefinition {
return [[[McFieldDefinition alloc] initWithText:@"0201FFM100"] autorelease];
}
谢谢!
静态分析器通知我以下代码可能存在泄漏。我不明白怎么会有泄漏的空间。此外,我不明白分析器如何在整个项目中如此有用,但却错过了这么简单的东西。
我的假设是分析器是正确的,我正在泄漏。但是怎么做?
+ (McFieldDefinition *) freeformFieldDefinition {
return [[[McFieldDefinition alloc] initWithText:@"0201FFM100"] autorelease];
}
谢谢!
很抱歉发布这个问题。我终于在这里找到了答案: 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;
}