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并使用该工具链进行构建。