谈一谈头文件引用(#include,#import,@import,@class)

来源:互联网 发布:手机淘宝直通车在哪 编辑:程序博客网 时间:2024/05/18 15:09

#include,#import,@import,@class 这四个指令在 ios (OC)开发中比较常见之所以共存,是因为四者有较大的区别,下面来一一详解。

#include

熟悉 C 或者 C++ 的童鞋可能会知道,在 C 和 C++ 里,#include 是非常常见的,用来包含头文件。#include 做的事情其实就是简单的复制粘贴,将目标 .h 文件中的内容一字不落地拷贝到当前文件中,并替换掉这句 include。
注意点:在使用#include的时候要注意处理重复引用(这也是objc中#include与#import的区别)

#import

#import 大部分功能和 #include 是一样的,但是他处理了重复引用的问题,我们在引用文件的时候不用再去自己进行重复引用处理,这使你在递归包含中不会出现问题。总的来说,#import 比起 #include 的好处就是不会引起交叉编译。

@import

@import 是 iOS 7 之后的新特性语法,这种方式叫 Modules(模块导入) 或者 “semantic import(语义导入)” ,是一种更好的头部预处理的执行方式,这 iOS 7 之后你能通过 @import 语法来导入任何的framework,Modules 是一种将所有可执行的 framework 打包在一起,只有在需要时才能导入到源代码中,这种方式比起传统的 #import 更安全和更高效。

举个例子:

#import <SomeLibrary/SomeFile.h>

要将此库作为模块导入,代码将改为:

@import SomeLibrary;

这有助于将代码将 SomeLibrary 框架自动链接到项目中。模块还允许您仅将您真正需要的组件包含在项目中。例如,如果要在 AwesomeLibrary 框架中使用 AwesomeObject 组件,通常您必须导入所有内容才能使用一个。但是,使用模块可以导入要使用的特定对象:

@import AwesomeLibrary.AwesomeObject;

实际开发中上可能并不需要使用 @import 关键字。如果你选择使用”modules”(Xcode5 以后中默认开启,如下图所示),所有的 #import 和 #include 指令都会自动映射使用 @import。尤其对于没有善用 .pch 头文件的开发者或者你的项目中有许多零碎小的源文件时, 使用 @import 导入指定框架下需要的头文件时,Xcode 的编译表现会有提高。
这里写图片描述

@class

主要是用于声明一个类,告诉编译器它后面的名字是一个类的名字,而这个类的定义实现是暂时不用知道的,后面会告诉你.也是因为在 @class 仅仅只是声明一个类,所以在后面的实现文件里面是需要去 #import 这个类,这时候才包含了这个被引用的类的所有信息。一般来说,在 interface 中引用一个类,就用 @class,它会把这个类作为一个类型来使用,而在实现这个 interface 的文件中,如果需要引用这个类的实体变量或者方法之类的,还是需要 import 这个在 @class 中声明的类。

原创粉丝点击