我刚刚遇到了 XCode 3.2 的 XCode 静态代码分析器的问题。它向我展示了一个潜在的泄漏,我认为这是不合理的。我只是想和其他人核实一下,确保它真的是误报。
这是主要代码(在某些函数体中):
NSError *error = nil;
NSData *urlData = /* ... */;
NSXMLDocument *doc = [[NSXMLDocument alloc] initWithData:urlData options:0 error:&error];
if (![self validateObject:doc withError:error]) {
return;
}
// ...
[doc release];
这是上面调用的验证方法:
- (BOOL)validateObject:(id)object withError:(NSError *)error {
if (!object) {
// do something meaningful...
return NO;
} else {
return YES;
}
}
XCode 告诉我 doc 的分配是一个潜在的泄漏,因为 validate 方法可能返回 NO 并且 release 不会被发送到 doc。但事实上,如果初始化失败,initWithData:options: 会返回nil,并没有造成任何伤害。文档甚至说明了这一点。
那么,专家们是怎么说的呢?假阳性与否?
最好的,哈拉尔