iOS #include与#import的区别

#include  #import  @class   讲解  

#include

区分 #include <x.h>#include "x.h"的作用
#include <x.h>:它用于对系统自带的头文件的引用,编译器会在

系统文件目录下去查找该文件.
#include "x.h":
用户自定义的文件用双引号引用,编译器首先会

在用户目录下查找,然后到安装目录中查找,最后在系统文件中查找。

在使用#include的时候要注意处理重复引用(这也是objc#include#import的区别)

例如:ClassA ClassB同时引用了ClassC,不做重复引用处理的时候在ClassD中同时引用ClassA,ClassB编译会提示对ClassC重复引用的错误.

我们可以:#ifndef _CLASSC_H#define _CLASSC_H

#include "ClassC"

#endif这样处理在编译时就不会有重复引用的错误出现(在objc

#import解决了这个问题,这是它们的区别)#import

#import 大部分功能和#include是一样的,但是他处理了重复引用的问题,我们在引用文件的时候不用再去自己进行重复引用处理.

@class

主要是用于声明一个类,告诉编译器它后面的名字是一个类的名字,而这个类的定义实现是暂时不用知道的,后面会告诉你.也是因为在@class仅仅只是声明一个类,所以在后面的实现文件里面是需要去#import这个类,这时候才包含了这个被引用的类的所有信息。

综上所述#include,#import@class的区别可以做一下理解:

#include#import在引用一个类的时候会包含这个类的所有信息包括变量方法等,但是这样做会对编译效率造成影响.比如有100个类都#importClassA,那么在编译的时候这100个类都会去对ClassA处理.又比如AB引用,BC引用,CD引用.....此时如果A被修改,那么后面的B,C,D.....都需要重新进行编译.还有一个用法会引起编译错误的就是在ClassA#import ClassB ClassB#import ClassA那么在编译的时候也会出现未知错误。

所以一般来说,在 interface 中引用一个类,就用@class,它会把这个类作为一个类型来使用,而在实现这个 interface 的文件中,如果需要引用这个类的实体变量或者方法之类的,还是需要 import

这个在@class 中声明的类。 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。