Я только что столкнулся с проблемой со статическим анализатором кода XCode XCode 3.2. Это показывает мне потенциальную утечку, которую я считаю неоправданной. Я просто хочу проверить с другими людьми и убедиться, что это действительно ложный положительный результат.
Вот основной код (в некотором теле функции):
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 сообщает мне, что распределение документа является потенциальной утечкой, поскольку метод validate может вернуть NO, а release не будет отправлен в doc. Но на самом деле, если инициализация не удалась, initWithData: options: возвращает nil, и никакого вреда не причиняется. Документы даже утверждают это.
Итак, что говорят эксперты? Ложно или нет?
Бест, Харальд