YYModel源码解析(一)YYModel.h

1._has_include()
以前自己从没用过 __has_include() 这个宏,其实从字面意义也能猜出其意:可否引入某个文件,它有一个参数,传入的就是想判断的文件名或路径,如果可以引入则返回1,反之则0.

2.FOUNDATION_EXPORT

首先看看 FOUNDATION_EXPORT 的定义:

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

#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

可以看出FOUNDATION_EXPORT兼容了win32程序,而我们这里的使用可以把他当做FOUNDATION_EXTERN 就可以了,然后FOUNDATION_EXTERN是兼容了c/c++的,所以如果涉及到c/c++的宏和oc互相使用时,可以用FOUNDATION_EXTERN.

再就是FOUNDATION_EXPORT和 #define 的对比,一般用#define定义一个常量字符串如下:

#define TempString @“tempStr”

当做字符串比较时只能调用比较方法来实现比较:

[TempString isEqualToString:@"tempStr"];

但FOUNDATION_EXPORT可以直接用 ‘==’ 来进行直接比较:

FOUNDATION_EXPORT NSSting *TempString;

比较时:

TempString == @"tempStr";

你可能感兴趣的:(YYModel源码解析(一)YYModel.h)