Статический анализатор Xcode и copyWithZone

Статический анализатор Xcode 4 помечает этот метод как имеющий чрезмерно высвобожденное возвращаемое значение, когда кажется, что это не так.

- (id)copyWithZone:(NSZone *)zone
{
    return [[[self class] allocWithZone:zone] initWithURL:self.url postString:self.postString];
}

Здесь есть стрелка, указывающая от ключевое слово return - в следующее за ним выражение, а другое - из этого выражения в предупреждение анализатора. Вот статический анализ:

  1. Метод возвращает объект Objective-C с +1 счетчиком сохранения
  2. Объект отправлен -autorelease message
  3. Объект возвращен вызывающей стороне как ссылка-владелец (единичный счетчик сохранения передан вызывающей стороне)
  4. Объект, возвращенный вызывающей стороне с +0 (не владеющим) счетчиком сохранения
  5. Объект с +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.

7
задан titaniumdecoy 17 June 2011 в 23:02
поделиться