objective-c - Xcode 静态分析器和 copyWithZone

标签 objective-c ios reference-counting clang-static-analyzer

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

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

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

  1. 方法返回一个保留计数为 +1 的 Objective-C 对象
  2. 对象已发送 - 自动释放消息
  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;
}

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

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

最佳答案

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

关于objective-c - Xcode 静态分析器和 copyWithZone,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6240928/

相关文章:

java - 现有学校作业的替换项目

ios - Xcode 代码覆盖率和 fopen$UNIX2003

swift - Swift 的自动引用计数的自动性是什么?

c# - 将 PopoverviewController 添加到 UIBarButtonItem Xamarin IOS

arrays - Swift 数组搞乱了弱变量的释放

c++ - 多线程环境中的智能指针

ios - 更改 UILabel 的部分文本

ios - 图像作为按钮 C4

objective-c - 如何制作类似 Explore Flickr 应用旋转动画的动画

objective-c - 如何将 UTF-8 字符添加到 NSString?