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 静态分析器不再将此标记为问题。