#include,#import,@class的区别

简介: #include,#import,@class的区别

#include

       #include <> :用于对 系统文件的引用,编译器会在系统文件目录下去查找该文件。

       #include "xx.h":用于对用户自定义的文件的引用,编译器首先会去用户目录下查找,然后去安装目录,最后去系统目录查找。

      注:使用include要注意重复引用的问题:


      class A,class B都引用了class C,class D若引用class A与class B,就会报重复引用的错误。

#import

     功能与include基本相同,不过它避免了重复引用的问题。所以在OC中我们基本用的都是import。

@class

     @class就是告诉编译器有这个类存在,但是类是如何实现的不用告诉编译器.若.m文件用到了这个类,还是要在.m文件汇总import这个类的。

     既然这样,为什么不直接在头文件中import呢,举个例子:

     class A引用了class B,class B引用了class C.... , class A,B,C...的头文件又import了很多文件,那么 import了A的话,编译器就需要编译大量的文件,编译时间就会增加。

     难道头文件中都是用@class吗?当然不是,有时也是需要#import的,那么什么时候该用什么呢?


(1)一般如果有继承关系的用#import,如B是A的子类那么在B中声明A时用#import;

(2) 另外就是如果有循环依赖关系,如:A->B,B->A这样相互依赖时,如果在两个文件的头文件中用#import分别声明对方,那么就会出现头文件循环利用的错误,这时在头文件中用@class声明就不会出错;

(3)还有就是自定义代理的时候,如果在头文件中想声明代理的话如@interface SecondViewController:UIViewController时应用#import不然的话会出错误,注意XXXXDelegate是自定义的。


相关文章
|
1月前
|
编译器 C++
#include<> 与#include ""的区别
在C++中,`#include &lt;&gt;` 和 `#include &quot;&quot;` 都用于包含头文件,但使用场景不同。`#include &lt;&gt;` 用于包含系统标准库头文件,编译器会在标准库路径中查找;而 `#include &quot;&quot;` 用于包含用户自定义的头文件,编译器会优先在当前项目目录中查找。
|
5月前
|
存储 C语言 C++
#include <string>的用法
#include <string>的用法
97 0
|
6月前
|
编译器 C++
c++中typename和class的区别
c++中typename和class的区别
59 0
|
编译器 C语言 C++
C++中的 class和struct区别
C++ 中保留了C语言的 struct 关键字,并且加以扩充。在C语言中,struct 只能包含成员变量,不能包含成员函数。而在C++中,struct 类似于 class,既可以包含成员变量,又可以包含成员函数。 C++中的 struct 和 class 基本是通用的,唯有几个细节不同: 使用 class 时,类中的成员默认都是 private 属性的;而使用 struct 时,结构体中的成员默认都是 public 属性的。 class 继承默认是 private 继承,而 struct 继承默认是 public 继承(《C++继承与派生》一章会讲解继承)。 class 可以使用模板,
135 0
|
算法 编译器 数据库
【CPP】string 类的模拟实现(下)
【CPP】string 类的模拟实现(下)
【CPP】string 类的模拟实现(下)
|
存储 编译器 C++
【CPP】string 类的模拟实现(上)
【CPP】string 类的模拟实现(上)
【CPP】string 类的模拟实现(上)
|
JSON 数据格式
@JsonInclude(JsonInclude.Include.NON_EMPTY)注解含义
@JsonInclude(JsonInclude.Include.NON_EMPTY)注解含义
707 0
@JsonInclude(JsonInclude.Include.NON_EMPTY)注解含义
|
Java Spring
FileSystemResource和ClassPathResource有何区别?
FileSystemResource和ClassPathResource有何区别?
FileSystemResource和ClassPathResource有何区别?
|
JavaScript 程序员
Class-总结class的基本用法和两个注意点
一、注意点一:class关键字区间使用 二、注意点二:Class关键字内部函数