陈斌彬的技术博客

Stay foolish,stay hungry

iOS-#include、#import和@class区别

在OC中,引用文件可以通过#include、#import、@class三种方式,本文将讲解这三种方式的不同之处以及选择方式。

一. #include

1.在C语言中,我们使用#include来引入头文件。使用#include “xx.h”来引入自定义的头文件,使用#include<xx.h>来引入库中的头文件。

2.但是#include并不能防止重复引用头文件,如果在文件中,重复引用头文件,将会报错。(如:A引入了B,B引入了C,A再引入C,就会报错) 所以在OC中,几乎没有使用#incldue引头的情况。

二. #import

1.#import#include的升级版,可以防止重复引入头文件这种现象的发生。

2.#import在引入头的时候,就是完全将头文件拷贝到现在的文件中。所以也有效率上的问题。

3.#import最大的问题在于,需要避免出现头文件递归引入的现象。(如:A引入B,B引入A,那么A、B的头文件会互相不停的拷贝)

三. @class

1.@class用来告诉编译器,有这样一个类,使书写代码时,不报错。

2.因为#import引入头文件有效率问题,所以,当还没有调用类中方法,仅仅是定义类变量的时候,使用@class来提醒编译器。而在真正需要调用类方法的时候,进行#import。 (如:

现在需要在Student.h文件中定义一个Book类的变量book

那么不需要在Student.h中#import “Book.h”

而是在Student.h中@class Book 来是编译器不报错,告诉编译器我现在使用的Book是一个类,可以定义变量book

在之后的Student.m文件中,需要调用book方法时,在#import “Book.h”

从而降低#import在效率上的问题。)

3.如果A是B的父类,那么这是在B.h中就必须要使用#import来引入A的头,因为需要知道A类中有哪些变量和方法,以免B类中重复定义。