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

标签 iphone xcode

例如,在不产生警告的情况下实现委托(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/

相关文章:

ios - 使用 WatchOS App 时未调用 viewDidLoad

ios - Restkit — 如何映射具有可变键名的 json 对象

Xcode 7.3/Swift 2.2 错误?代码在模拟器中构建,但在设备上显示错误

ios - 下一个按钮图像数组xcode

iphone - 通过 NSURL 和 NSData 传递特殊字符

iphone - 应用程序促销网站 - 横向 iPhone 应用程序网站模板

ios - 使用简单的初始化在测试中创建 CoreData 对象

xcode - 如何使用 CMake 在 "Other linker flags"中设置库?

iphone - 如何将格式化的 nsstring 转换为 NSNumber 或者只是删除格式?

ios - 应用程序未在设备设置下列出 --> iOS 7 的通知