YYModel 源碼解讀(一)之YYModel.h


#if __has_include(<YYModel/YYModel.h>)
FOUNDATION_EXPORT double YYModelVersionNumber;
FOUNDATION_EXPORT const unsigned char YYModelVersionString[];
#import <YYModel/NSObject+YYModel.h>
#import <YYModel/YYClassInfo.h>

#else
#import "NSObject+YYModel.h"
#import "YYClassInfo.h"
#endif

__has_include

此宏傳入一個你想引入文件的名稱作為參數,如果該文件能夠被引入則返回1,否則返回0。

拓展:

#include / #import 語句有兩種方式包含頭文件,分別是使用雙引號" "與左右尖括號< >。其區別是(對於不是使用完全文件路徑名的)頭文件的搜索順序不同

使用雙引號" "的頭文件的搜索順序:

  1. 包含該#include語句的源文件所在目錄;
  2. 包含該#include語句的源文件的已經打開的頭文件的逆序;
  3. 編譯選項-I所指定的目錄
  4. 環境變量INCLUDE所定義的目錄

使用左右尖括號< >的頭文件的搜索順序:

  1. 編譯選項-I所指定的目錄
  2. 環境變量INCLUDE所定義的目錄

再來介紹下 

FOUNDATION_EXPORT 是做什么的我們先看下NSObjCRuntime.h中的寫法

#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 拓展了 C 的一些庫

 


在ios開發中,

FOUNDATION_EXPORT 和#define 作用是一樣的,使用第一種在檢索字符串的時候可以用 ==  #define 需要使用isEqualToString 在效率上前者由於是基於地址的判斷 速度會更快一些


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM