使Xcode 4.3警告当前@实现中存在的未声明方法



Xcode 4.3在当前 @implementation中存在未声明的方法时不会发出警告,这是一个很好的新功能。然而,在某些情况下,当在Xcode 4.2上使用我的项目时,这会导致问题。

如何重新启用未声明方法的警告?

例如:

@interface MashTun : NSObject
- (void)foo;
@end
@implementation MashTun
- (void)foo {
    CGRect rect = [self smallRect];
    NSLog(@"My Small Rect: %@", NSStringFromCGRect(rect));
}
- (CGRect)smallRect {
    return CGRectMake(0, 0, 100, 100);
}
@end

在Xcode 4.2中,此操作失败:

warning: instance method '-smallRect' not found (return type defaults to 'id')
error: initializing 'CGRect' (aka 'struct CGRect') with an expression of incompatible type 'id' 

我完全理解Xcode 4.2中的警告和错误,因为它不允许搜索当前@implementation范围内的方法。(修复方法很简单:要么将smallRect方法置于foo方法之上,要么在类别或标头中声明smallRect方法。)

但是,在将错误传递给运行4.2的同事之前,我如何在Xcode 4.3中打开警告来捕捉这个错误呢?

新的LLVM 3.1编译器并不关心这一点。将方法放在上面/下面,或者是否有原型都无关紧要。因此,如果你所有的同事都将他们的Xcode更新到了4.3。这真的不应该成为一个问题。

另一种选择是使用下面的代码创建自己的警告。你冷通知他们这个问题,以及手头的问题。这可能是传达信息的一种简单方法。

#warning "warning message"

希望这能有所帮助。

我不知道我是否有一个有趣的版本,但我的LLVM 3.1编译器在编译器警告下确实有未声明的选择器标志。当前运行4.3.2。但是LLVM 4.0没有它。

在这种转换过程中的一个选项是与另一个编译器/版本交叉编译。gcc-llvm是一种常见的、预先安装的替代方案。另一种方法是安装多个版本的xcode并使用该工具链进行构建。

最新更新