美文网首页
关于FOUNDATION_EXTERN #define ext

关于FOUNDATION_EXTERN #define ext

作者: 二斤寂寞 | 来源:发表于2018-07-12 23:29 被阅读40次

    前言:
    日日撸码,臣服于业务。以前看一些第三方库,发现人家库中这么使用,没有在意。突然发现公司大神也这样写的代码,一副没见过世面的样子,尴尬五分钟、、、、
    发现自己真实low的一匹。赶快学习一下,还是被老夫挖掘出来一些好的文章,备以后查阅。

    FOUNDATION_EXTERN

    #if defined(__cplusplus)
    #define FOUNDATION_EXTERN extern "C"
    #else
    #define FOUNDATION_EXTERN extern
    #endif
    

    总结:

    由以上定义可以看出 FOUNDATION_EXTERN 是可以兼容C++的extern的宏。同样也可以推测出 extern "C" 也就是用来兼容C++里面的extetrn的。

    表示extern全局变量,此时并没有分配内存,需要在.m文件中实现。
    此时为了支持C和C++混编(__cplusplus 是C++编译器内部定义的宏,在C++中,需要加 extern"C" 或包含在 extern "C" 块中)

    注意,此时外界是可以修改这个值。

    用法:

    //.h
    FOUNDATION_EXPORT NSString * const kMyConstantString;  
    FOUNDATION_EXPORT NSString * const kMyConstantString2;
    
    //.m
    NSString * const kMyConstantString = @"Hello";
    NSString * const kMyConstantString2 = @"World";
    

    define

    #define kMyConstantString @"Hello World"
    

    FOUNDATION_EXTERN 和 define区别:

    在检测字符串的值是否相等的时候:

    • 使用FOUNDATION_EXTERN更快,直接使用(stringInstance == MyFirstConstant)来比较,
      比较的是指针地址

    • 使用define稍慢,使用的是这种([stringInstance isEqualToString:MyFirstConstant])
      比较字符串的每一个字符是否相等.

    FOUNDATION_EXPORT && FOUNDATION_IMPORT

    #if TARGET_OS_WIN32
     
        #if defined(NSBUILDINGFOUNDATION)
            #define FOUNDATION_EXPORT FOUNDATION_EXTERN __declspec(dllexport)
        #else
            #define FOUNDATION_EXPORT FOUNDATION_EXTERN __declspec(dllimport)
        #endif
     
        #define FOUNDATION_IMPORT FOUNDATION_EXTERN __declspec(dllimport)
     
    #else
        #define FOUNDATION_EXPORT  FOUNDATION_EXTERN
        #define FOUNDATION_IMPORT FOUNDATION_EXTERN
    #endif
    

    我们在iOS编程中一般是很少用到这两个宏,这两个是用来兼容win32应用程序的,
    为了兼容C++的编程,因为在C++的编程中是存在两种定义的

    __declspec(dllexport)              
    __declspec(dllimport)
    dllexport和dllimport的区别请看参考文章中的详细介绍

    NSObjCRuntime.h中你不知道的宏

    带挖掘续写.....

    参考地址:
    应该使用FOUNDATION_EXPORT还是#define来定义常量?
    c++ 中__declspec 的用法
    NSObjCRuntime.h中你不知道的宏

    相关文章

      网友评论

          本文标题:关于FOUNDATION_EXTERN #define ext

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