Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Xcode static analyzer and copyWithZone

The Xcode 4 static analyzer flags this method as a having an over-released return value when that does not seem to be the case.

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

There is an arrow pointing from the return keyword to the expression following it, and another from that expression to the analyzer warning. Here is the static analysis:

  1. Method returns an Objective-C object with a +1 retain count
  2. Object sent -autorelease message
  3. Object returned to caller as an owning reference (single retain count transferred to caller)
  4. Object returned to caller with a +0 (non-owning) retain count
  5. Object with +0 retain counts returned to caller where a +1 (owning) retain count is expected

Is the static analyzer incorrect or is there something wrong with this code?


By request, the -initWithURL:postString: method:

- (id)initWithURL:(NSURL *)u postString:(NSString *)p
{
    if ( (self = [super init]) ) 
    {
        self.url = u;
        self.postString = p;
    }
    return self;
}

I continue to get this warning even after cleaning and rebuilding the project.

UPDATE: The Xcode static analyzer no longer flags this as an issue after upgrading to Xcode 4.2.

like image 520
titaniumdecoy Avatar asked Jun 05 '11 03:06

titaniumdecoy


1 Answers

That's a bug in Xcode. The code is alright.

like image 60
Cocoanetics Avatar answered Nov 10 '22 12:11

Cocoanetics