zoukankan      html  css  js  c++  java
  • 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 在效率上前者由于是基于地址的判断 速度会更快一些

  • 相关阅读:
    oracle 11g jdbc jar包在哪个文件目录
    Java生成验证码
    Oracle 安装“权限不够”
    Linux新建文件、文件夹
    基于Java web技术文件上传和下载功能开发实战练习视频(fileupload)
    springmvc的xml文件位置
    oracle 11g的OEM(企业管理器),https://主机ip:1158/em/console网页无法显示
    常见的开源协议分析
    约瑟夫问题猴子选大王
    TOJ1036.Rails STL栈
  • 原文地址:https://www.cnblogs.com/machao/p/5514921.html
Copyright © 2011-2022 走看看