#include和#import区别以及@class作用
2015-04-21 14:45
375 查看
对于#import,我想做过iOS开发的人应该都不陌生。在开发过程中,当我们需要声明某一个类时,都需要去引用。而#imclude的话,在我们学习C时就已经知道了,他的作用也是引用声明的意思。在表面上他们的作用似乎都是一样的。但是在具体功能实现方式上,还是有着很大的区别。
#import声明时可以重复引用同一个文件多次,因为他在编译的时候会做一次判断,如果已经导入就不需要再导入了。
如果不是c/c++文件,尽量使用#import。并且如果能在实现文件中#import,就不在头文件中#import。(下面已经给出了原因)
(但是我今天再去这样尝试的时候,又能够编译通过了,具体原因还需查证)
既然是好处的话,我觉得只是为了在这种情况下避免报错肯定不太可能。查了一下资料发现,@class声明的只是这个类的名称;而#import的话,是把引用的这个类的头文件全部走一遍,包括所有的成员变量和方法。所以在编译效率上,@class肯定是要更好的。试想一下,如果现在几十个类全部需要引用某一个类,那么这几十个类在编译的时候都需要把这个类的头文件走一遍,这个.......(楼主先去抽泣一会儿~)。再假如在递归调用的时候,(A→B,B→C,C→D.....)可想而知,使用@class,在编译的时候确实会快很多。
所以如果能在头文件中@class实现文件中#import,就不在头文件中#import。(因为有时在,h文件需要用到被声明的类的成员变量,所以有时需要使用#import)
一、#import和#include区别
#include声明时相当于拷贝所代表头文件中的声明内容,所以如果使用两次#include的话,会报重复定义的错误。#import声明时可以重复引用同一个文件多次,因为他在编译的时候会做一次判断,如果已经导入就不需要再导入了。
如果不是c/c++文件,尽量使用#import。并且如果能在实现文件中#import,就不在头文件中#import。(下面已经给出了原因)
二、在.h文件中使用@class代替#import的好处
之前我所理解到的,在一个.h文件中使用@class ClassName,然后在.m文件中再使用#import声明该类,这种方式是为了由于相互引用会报错的原因。(即A→B,B→A)(但是我今天再去这样尝试的时候,又能够编译通过了,具体原因还需查证)
既然是好处的话,我觉得只是为了在这种情况下避免报错肯定不太可能。查了一下资料发现,@class声明的只是这个类的名称;而#import的话,是把引用的这个类的头文件全部走一遍,包括所有的成员变量和方法。所以在编译效率上,@class肯定是要更好的。试想一下,如果现在几十个类全部需要引用某一个类,那么这几十个类在编译的时候都需要把这个类的头文件走一遍,这个.......(楼主先去抽泣一会儿~)。再假如在递归调用的时候,(A→B,B→C,C→D.....)可想而知,使用@class,在编译的时候确实会快很多。
所以如果能在头文件中@class实现文件中#import,就不在头文件中#import。(因为有时在,h文件需要用到被声明的类的成员变量,所以有时需要使用#import)
相关文章推荐
- OC学习篇之---@class关键字的作用以及#include和#import的区别
- OC学习篇之---@class关键字的作用以及#include和#import的区别
- OC学习篇之---@class关键字的作用以及#include和#import的区别
- OC学习篇之---@class关键字的作用以及#include和#import的区别
- OC学习篇之---@class关键字的作用以及#include和#import的区别
- java import、package作用与用法以及与C include的区别
- linux c 一站式学习 extern关键词作用、变量的声明与定义以及extern与include的区别(都与extern有关)
- #import和#include以及@class三者的区别?
- @class以及#include和#import的区别
- C语言 switch和if..else的区别 以及枚举的作用
- getClass()和getSimpleName()的区别和作用
- jsp和Servlet的区别以及什么时候创建Servlet或者class文件
- 关键字static和const的作用以及它们的区别
- Java中volatile和synchronized 作用以及区别
- OC_#import与@class的导入类区别
- C# 中 Struct 与 Class 的区别,以及两者的适用场合
- class和struct的区别以及struct和union的区别
- C++ #include <iostream> #include <iostream.h> #include <string.h>区别及作用
- php class中self,parent,this的区别,以及实例