【问题标题】:Disable instance method not found warning禁用未找到实例方法警告
【发布时间】:2012-03-14 18:53:17
【问题描述】:

我目前正在研究一个NSProxy 子类,它截获某些消息并且从不将它们转发给任何人而只是对其进行处理,因此这些方法永远不会真正存在。问题来了,显然编译器开始抱怨缺少方法实现,我不知道如何停止它,向接口添加存根方法只是为了让编译器关闭是行不通的,因为方法是任意形式的,我不知道它们(为了更具体一点,我要求this 项目)。

理想情况下,我想告诉编译器它根本不应该对这个特定的类进行任何方法检查,但由于这似乎不太可能,我也会为#pragma 或任何其他方式感到高兴(这不会'不包括为整个项目/文件中的每个警告关闭编译器!)

【问题讨论】:

    标签: objective-c llvm clang nsproxy


    【解决方案1】:

    您的 switch 语句并不是真正任意的,它们只是可以具有任意长度。对于大量的长度,您可以继续并为编译器的利益声明它们(然后您将获得错误检查,如果您只是关闭警告就不会这样做)。例如:

    typedef void (^ObjCCaseBlock)();
    
    @interface NSObject ()
    - (id)switch;
    - (void)case:(NSString*)a :(ObjCCaseBlock)b;
    - (void)case:(NSString*)a :(ObjCCaseBlock)b case:(NSString*)a :(ObjCCaseBlock)b;
    - (void)case:(NSString*)a :(ObjCCaseBlock)b case:(NSString*)a :(ObjCCaseBlock)b case:(NSString*)a :(ObjCCaseBlock)b;
    @end
    

    重复尽可能多的关卡(如果遇到问题,您可以添加关卡)。这有点乏味,但并不难。

    【讨论】:

    • 或者,它确实有效,但它几乎很快就会变得又大又讨厌。
    • 在谷歌上搜索了一下之后,它似乎是唯一的选择(虽然为#pragma 提交了雷达)......我对解决方案并不满意,但我想它确实如此现在必须做的伎俩。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    相关资源
    最近更新 更多