我刚遇到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指出我正确的方向,以消除警告。现在我想弄清楚为什么警告首先出现。
如果有人有任何想法或线索,我喜欢听他们。
谢谢, 最大
答案 0 :(得分:3)
两个问题:
NSObject
,而不是Object
。init
方法应该返回id
,而不是MyClass*
。答案 1 :(得分:0)
警告说,此时它在范围内根本不知道名为-init
的任何方法。您需要导入一个声明-init
的头文件,该文件可能是Foundation.h或其他内容,具体取决于您使用的系统。