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

Iphone 是否可以抑制特定任务的编译器警告?,iphone,xcode,Iphone,Xcode,例如,在不创建警告的情况下实现委派技术似乎是不可能的。这真的毫无意义,因为: if (self.myDelegate != nil) { BOOL callDelegate = [self.myDelegate respondsToSelector:@selector(fooDidHappen:WithBar:)]; if (callDelegate) { [self.myDelegate fooDi

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

        if (self.myDelegate != nil) {
            BOOL callDelegate = [self.myDelegate respondsToSelector:@selector(fooDidHappen:WithBar:)];
            if (callDelegate) {
                [self.myDelegate fooDidHappen:foo withBar:bar];
            }
        }
如您所见,我询问代理是否响应该选择器。但是在if块中,只有当代理响应它时才输入,我得到一个愚蠢的警告:代理没有响应。当然不会,因为这段代码只在运行时充分利用。然而,在xcode中继续使用编译器警告是非常糟糕的做法,所以我想告诉编译器忽略它

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

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

话虽如此,如果要抑制警告,可以使用GCC diagnostics pragma:

//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是一个版本,但我可能有偏见,因为我为它编写了补丁)。

对于如何抑制特定警告的原始问题,我认为有一个xconfig文件可以做到这一点,尽管我还没有找到任何特定的文档(看起来不够努力).

这是两个重复问题中较老的一个。实际上,这并不总是有效的。编译器需要知道参数的类型,才能正确编译方法调用本身。好吧,他应该解决这个问题,这就是我链接到另一篇文章的原因。我假设编译器只是通过查看参数的类型来推断“v:@”。可能是错误导致运行时错误,但您始终可以抑制警告,这不是一个好主意;-)