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:

  • Method returns an Objective-C object with a +1 retain count
  • Object sent -autorelease message
  • Object returned to caller as an owning reference (single retain count transferred to caller)
  • Object returned to caller with a +0 (non-owning) retain count
  • 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.


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

    链接地址: http://www.djcxy.com/p/7598.html

    上一篇: 在Codeigniter中将活动记录与标准SQL查询混合使用

    下一篇: Xcode静态分析器和copyWithZone