Xcode静态分析器和copyWithZone

tit*_*coy 7 reference-counting objective-c clang-static-analyzer ios

Xcode 4静态分析器将此方法标记为具有过度释放的返回值,而在这种情况下似乎并非如此.

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

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

  1. 方法返回具有+1保留计数的Objective-C对象
  2. 对象发送-autorelease消息
  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;
}
Run Code Online (Sandbox Code Playgroud)

即使在清理和重建项目后,我仍然会收到此警告.

更新:升级到Xcode 4.2后,Xcode静态分析器不再将此标记为问题.

Coc*_*ics 3

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