Xcode 4静态分析器将该方法标记为具有被过度释放的返回值,但似乎情况并非如此。
有一个箭头从return关键字指向其后面的表达式,另一个箭头从该表达式指向分析器警告。以下是静态分析:
根据请求,这是-initWithURL:postString:方法:
- (id)copyWithZone:(NSZone *)zone
{
return [[[self class] allocWithZone:zone] initWithURL:self.url postString:self.postString];
}
有一个箭头从return关键字指向其后面的表达式,另一个箭头从该表达式指向分析器警告。以下是静态分析:
- 方法返回一个Objective-C对象,并具有+1个保留计数
- 发送了-autorelease消息的对象
- 将对象作为拥有引用(单个保留计数转移给调用者)返回给调用者
- 使用+0(非拥有)保留计数将对象返回给调用者
- 在期望+1(拥有)保留计数的情况下,将具有+0保留计数的对象返回给调用者
根据请求,这是-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静态分析器不再标记此问题。