例如,在不产生警告的情况下实现委托(delegate)技术似乎是不可能的。这确实没有意义,因为:
if (self.myDelegate != nil) {
BOOL callDelegate = [self.myDelegate respondsToSelector:@selector(fooDidHappen:WithBar:)];
if (callDelegate) {
[self.myDelegate fooDidHappen:foo withBar:bar];
}
}
如您所见,我询问委托(delegate)是否响应该选择器。但是,在仅当代表响应时才输入的 if block 中,我收到一个愚蠢的警告,表明代表没有响应。当然不是,因为这段代码只有在运行时才能充分利用。然而,继续在 xcode 中处理编译器警告是非常糟糕的做法,因此我想告诉编译器忽略它。
例如,在 PHP 中,您可以编写 @anFunction(foo); @ 将确保这个函数根本不会给你任何警告。那么是否有可以在该部分周围键入的编译器指令或命令来消除警告?
最佳答案
在另一个question人们确切地告诉了您如何修复该警告,您可以为委托(delegate)声明一个正式协议(protocol),并将该协议(protocol)添加到委托(delegate)的属性声明中。
话虽如此,如果您想抑制警告,可以使用 GCC 诊断编译指示:
//Turn the warning off
#pragma GCC diagnostic ignored "-Wundeclared-selector"
if (self.myDelegate != nil) {
BOOL callDelegate = [self.myDelegate respondsToSelector:@selector(fooDidHappen:WithBar:)];
if (callDelegate) {
[self.myDelegate fooDidHappen:foo withBar:bar];
}
}
//Turn the warning back on
#pragma GCC diagnostic warning "-Wundeclared-selector"
请注意,这需要 GCC 4.2.1+ 或 CLANG(我认为 clang 是 improved 版本,但我可能有偏见,因为我为它编写了补丁)。
关于iphone - 是否可以抑制特定任务的编译器警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1223322/