Xcode静态分析器和copyWithZone

Xcode 4静态分析器将此方法标记为具有过度释放的返回值,但似乎并非如此。

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

有一个箭头从return关键字指向它后面的表达式,另一个从该表达式指向分析器警告。 这是静态分析:

  • 方法返回带有+1保留计数的Objective-C对象
  • 对象发送-autorelease消息
  • 对象返回给调用者作为拥有的引用(单个保留计数转移给调用者)
  • 对象以+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 4.2之后,Xcode静态分析器不再将此标记为问题。


    这是Xcode中的一个错误。 代码是没问题的。

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

    上一篇: Xcode static analyzer and copyWithZone

    下一篇: Specify that an interface can only be implemented by reference types C#