动态转发:禁止未完全执行警告(Dynamic forwarding: suppress Incomp

2019-07-18 12:11发布

我有一个类暴露一些方法中,它的实现是通过一个内对象提供。

我使用着调用在运行时的方法调用内部对象调度,但Xcode是抱怨,因为它无法找到的申报方法的实现。

我发现SO其他一些类似的问题,但他们都得到解决了设计变更。

我不是说这里有一个关于设计的讨论,但如果任何人有关于它的一些建议,我有一个悬而未决的问题在代码审查,这是更适合这类讨论。

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

Answer 1:

您可以抑制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

我是做多一点挖围绕这个一个跨越来到锵Compliler用户手册 ,所以我认为这将是有趣的,并有助于在这个区域附近仍然有任何问题。

我还发现了另一种方式,你可以使用这些#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

与海湾合作委员会的版本是

    #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你可以找到这里整个列表



Answer 2:

你可以声明一个类类接口中的方法:

@interface MyClass (ForwardedMethods)

- (void)doSomething;

@end

(不为类实现)。 然后,Xcode中不会再抱怨“完全执行”了。



文章来源: Dynamic forwarding: suppress Incomplete Implementation warning