是否可以抑制特定任务的编译器警告?

时间:2009-08-03 16:38:09

标签: iphone xcode

例如,在没有创建警告的情况下实现委派技术似乎是不可能的。这真的没有意义,因为:

        if (self.myDelegate != nil) {
            BOOL callDelegate = [self.myDelegate respondsToSelector:@selector(fooDidHappen:WithBar:)];
            if (callDelegate) {
                [self.myDelegate fooDidHappen:foo withBar:bar];
            }
        }

就像你看到的那样,我问代表是否响应那个选择器。但是在if-block中只有当委托才响应时才输入,我得到一个愚蠢的警告,表示委托没有响应。当然它没有,因为这段代码只在运行时充分利用。然而,继续使用xcode中的编译器警告是非常糟糕的做法,所以我想告诉编译器忽略它。

在PHP中,您可以编写@anFunction(foo);并且@将确保此功能根本不会给您任何警告。那么是否有一个编译器指令或命令可以围绕该部分键入以消除警告?

2 个答案:

答案 0 :(得分:6)

在另一个question人中告诉您如何修复该警告,您为委托声明了一个正式的协议,并将该协议添加到委托的属性声明中。

话虽如此,如果您想要取消警告,您可以使用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版本,但是自从我为它编写补丁后我可能会有偏见。)

答案 1 :(得分:0)

对于如何禁止特定警告的原始问题,我认为的xconfig文件将执行此操作,但我没有找到任何特定的文档(看起来不够努力)