在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类中重复定义。