美文网首页
iOS-C模块间条件调用

iOS-C模块间条件调用

作者: 笑破天 | 来源:发表于2023-02-02 22:11 被阅读0次

    Case:外部模块有一个函数fb_test,当有外部模块时调用fb_test,没有外部模块时不调用

    // 没有模块FB的时候,只extern声明模块FB的函数fb_test,不调用是可以的,调用的话会报错符号找不到
    extern void fb_test(void);
    
    // 宏定义只适用于模块内,不能跨模块
    //#ifdef B_H
    //    NSLog(@"包含");
    //#else
    //    NSLog(@"不包含");
    //#endif
    
    // __has_include是检测工程中是否包含某个头文件,注意:工程中存在的文件不一定被引用了。常用来防止头文件循环导入
    #if __has_include("FB/B.h")
        NSLog(@"包含");
        fb_test();
    #else
        NSLog(@"不包含");
    #endif
    
    // 弱符号:据网上介绍链接器发现同时存在弱符号和强符号,优先选择强符号,如果发现不存在强符号,只存在弱符号,则选择弱符号。据自己测试:跨模块场景下优先选择了本模块,strong和weak设置无效
    void __attribute__((weak)) fb_test(void) {
        printf("weak:%s\n",__func__);
    }
    

    综上所述:extern+__has_include即可。注意增删framework要clean才能build生效。

    相关文章

      网友评论

          本文标题:iOS-C模块间条件调用

          本文链接:https://www.haomeiwen.com/subject/zbsghdtx.html