对于非常简单的类,Clang生成警告“方法” - “未找到”

时间:2011-03-14 00:20:40

标签: objective-c clang

我刚遇到Clang/LLVM today,并决定尝试一下。

我的系统是FreeBSD8.1-Release。 默认的系统编译器是GCC4.2.1,这是我迄今为止用来编译Objective-C项目的。

我正在玩静态分析器,想知道如何消除正在生成的警告之一。

MyClass.h

#import <objc/Object.h>

@interface MyClass: Object {
}

-(MyClass*) init;

@end

MyClass.m

#import "MyClass.h"

@implementation MyClass

-(MyClass*) init {
        self = [super init];
        if (self) {
                // do stuff
        }
        return self;
}

@end

警告:

%clang --analyze MyClass.m
MyClass.m:7:9: warning: method '-init' not found (return type defaults to 'id')
        self = [super init];
               ^~~~~~~~~~~~
1 diagnostic generated.

我认为分析器不知道如何确定 super 的类型(在这种情况下是 Object )。有没有办法消除这个警告(除了抑制)?我考虑过投射 super ,但看起来不允许这样做。

谢谢! 最大


更新

感谢Dave和bbum指出我正确的方向,以消除警告。现在我想弄清楚为什么警告首先出现。

如果有人有任何想法或线索,我喜欢听他们。

谢谢, 最大

2 个答案:

答案 0 :(得分:3)

两个问题:

  • 您应该继承NSObject,而不是Object
  • 您的init方法应该返回id,而不是MyClass*

答案 1 :(得分:0)

警告说,此时它在范围内根本不知道名为-init任何方法。您需要导入一个声明-init的头文件,该文件可能是Foundation.h或其他内容,具体取决于您使用的系统。