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

2 iphone xcode

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

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

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

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

Lou*_*arg 6

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

话虽如此,如果您想要取消警告,您可以使用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"
Run Code Online (Sandbox Code Playgroud)

注意这需要GCC 4.2.1+或CLANG(并且clang具有我认为的改进版本,但是我可能因为我为它编写补丁而有偏见).