Статический анализатор Xcode 4 помечает этот метод как имеющий слишком большое возвращаемое значение, когда это не так.
- (id)copyWithZone:(NSZone *)zone
{
return [[[self class] allocWithZone:zone] initWithURL:self.url postString:self.postString];
}
Есть стрелка, указывающая от ключевого слова return к следующему за ним выражению, а другая - от этого выражения к предупреждению анализатора. Вот статический анализ:
- Метод возвращает объект Objective-C со счетчиком удержания +1
- Объект отправлен - сообщение автозапуска
- Объект, возвращенный вызывающей стороне как принадлежащая ссылка (единый счетчик сохраненных данных, переданный вызывающей стороне)
- Объект возвращен вызывающей стороне со счетчиком удержания +0 (не владеющий)
- Объект с +0 счетчиками удержания возвращается вызывающей стороне, где ожидается +1 (владеющий) счетчик удержания
Статический анализатор некорректен или что-то не так с этим кодом?
По запросу метод -initWithURL:postString:
:
- (id)initWithURL:(NSURL *)u postString:(NSString *)p
{
if ( (self = [super init]) )
{
self.url = u;
self.postString = p;
}
return self;
}
Я продолжаю получать это предупреждение даже после очистки и восстановления проекта.
ОБНОВЛЕНИЕ. Статический анализатор Xcode больше не отмечает это как проблему после обновления до Xcode 4.2.