目标c -动态转发:抑制未完全实现警告



我有一个类公开了一些方法,它们的实现是由一个内部对象提供的。

我在运行时使用前向调用来调度内部对象的方法调用,但XCode抱怨,因为它找不到声明的方法的实现。

我在SO上发现了一些其他类似的问题,但它们都通过设计更改解决了。

我不想在这里讨论设计,但是如果有人有什么建议,我有一个关于代码审查的开放问题,这更适合这种讨论。

我的问题是这里是否有一个方法来关闭Incomplete Implementation警告在XCode存在

可以通过添加

来抑制Incomplete Implementation警告
  #pragma clang diagnostic ignored "-Wincomplete-implementation"

刚好在@implementation之上

希望有帮助

编辑

在评论中被告知这对某人不起作用并找出原因是因为这是他们得到的不同警告,我已经做了一些游戏并且能够解决那里的问题,所以我想我会更新这个答案以包括他们的和GCC忽略。因此,对于@Tony的问题,以下应该可以工作

  #pragma clang diagnostic ignored "-Wprotocol"

对于任何想知道GCC编译器版本的人来说,它是

  #pragma GCC diagnostic ignored "-Wprotocol"
  #pragma GCC diagnostic ignored "-Wincomplete-implementation"

我还将指出,所有这些diagnotstic ignores也可以通过指定每个文件的设置来完成,通过转到XCODE Project >> Target >> Build Phases >> Compile Sources并添加编译器标志,因此您只需添加-WprotocolWincomplete-implementation或任何您需要的编译器标志。

希望这个更新对所有人都有帮助,如果再需要的话,我会更新我的答案,包括。

编辑2

我在这方面做了更多的挖掘,看到了Clang编译器用户手册,所以我认为这将是有趣的,并有助于任何人在这方面仍然有问题。

我还发现了另一种使用#pragma diagnostic ignores的方法也就是pushpop所以如果你只想忽略文件的特定部分而不是全部那么你可以这样做

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wmultichar"
    // And pop the warning is gone.
    char b = 'fa';
    #pragma clang diagnostic pop

请记住,所有这些#pragma编译忽略也可以与GCC一起使用,所以上面的

    #pragma GCC diagnostic push
    #pragma GCC diagnostic ignored "-Wmultichar"
    // And pop the warning is gone.
    char b = 'fa';
    #pragma GCC diagnostic pop

pushpop似乎与我迄今为止尝试过的所有diagnostic ignores一起工作。

另一个是

    #pragma clang diagnostic ignored "UnresolvedMessage"
    #pragma GCC diagnostic ignored "UnresolvedMessage"

用于抑制未使用的变量的是

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wunused-variable"
        NSString *myUnusedVariable;
    #pragma clang diagnostic pop

和GCC版本

    #pragma GCC diagnostic push
    #pragma GCC diagnostic ignored "-Wunused-variable"
        NSString *myUnusedVariable;
    #pragma GCC diagnostic pop

忽略来自unavailableInDeploymentTarget

的警告
    #pragma clang diagnostic push
    #pragma ide diagnostic ignored "UnavailableInDeploymentTarget"
        leftEdge.barTintColor = rightEdge.barTintColor = self.toolbar.barTintColor;
    #pragma clang diagnostic pop

和performSelector泄漏

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Warc-performSelector-leaks"
    [target performSelector:cancelAction withObject:origin];
    #pragma clang diagnostic pop

和不支持的声明

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wdeprecated-declarations"
        button = [[UIBarButtonItem alloc] initWithTitle:buttonTitle style:UIBarButtonItemStyleBordered target:self action:@selector(customButtonPressed:)];
    #pragma clang diagnostic pop

多亏了DanSkeel,你可以在这里找到完整的列表

可以在类类别接口中声明方法:

@interface MyClass (ForwardedMethods)
- (void)doSomething;
@end

(没有该类别的实现)。这样Xcode就不会再抱怨"实现不完整"了

最新更新