美文网首页
OC关键字:#include #import @class @

OC关键字:#include #import @class @

作者: 我是谁重要吗 | 来源:发表于2018-03-28 17:07 被阅读70次

    头部预处理的执行方式:

    #include是c/c++导入头文件的关键字 
    用 #ifndef ... #define ... #endif (防止头文件被重复包含!)
    
    
    #import 是oc导入头文件的关键字,
    #import实现了这种防止头文件重复包含的功能,
    只会自动导入一次,不会重复导入(递归包含),不会引起交叉编译。
    避免重复引用可能带来的编译错误。
    import就是把.h文件中的内容全部复制过来。
    
    #import <> 和 #import ""
    #import <> 引用系统文件,它用于对系统自带的头文件的引用,
    编译器会在系统文件目录下去查找该文件.
    #import "" :用户自定义的文件用双引号引用,
    编译器首先会在用户目录下查找,然后到安装目录中查,最后在系统文件中查找
    
    
    @class用于.h头文件,只是告诉编译器,其后面声明的名称是类的名称,
    至于这些类是如何定义的,暂时不用考虑。防止循环引用。
    而在实现类.m文件里面,因为会用到这个引用类的内部的实体变量和方法,
    所以需要使用#import来包含这个被引用类的头文件。
    
    
    @import是iOS 7之后的新特性语法,
    这种方式叫Modules(模块导入) 或者 "semantic import(语义导入)" ,
    通过@import语法来导入任何的framework,
    Modules是一种将所有可执行的framework打包在一起。
    不用在project settings那里添加framework,系统会自动帮你加载上了。
    使用Modules方式:
    将 #import <MapKit/MapKit.h> 替换为 @import MapKit;即可。
    而且你也可以只加载framework里面的submodules:
    @import MapKit.MKAnnotation;
    在Build Settings中将Enable Modules(C and Objective-C)打开,
    然后保持原来的#import写法就行了。是的,不需要任何代码上的改变,
    编译器会在编译的时候自动地把可能的地方换成Modules的写法去编译的。
    
    
    总结:
    能在实现文件中#import,就不在头文件中#import。
    能在头文件中@class,就不在头文件中#import。
    一般如果有继承关系的用#import,
    如B是A的子类那么在B中声明A时用#import
    

    相关文章

      网友评论

          本文标题:OC关键字:#include #import @class @

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