objc 源文件拆分

在程序越来越大或是大型的工程项目中如果把代码都塞进main文件中,搜寻代码修改等将会非常麻烦,所以可以将其中的类,函数等拆分到其他文件中

一般将类的接口,定义的全局变量,struct,define等都放在.h头文件,将实现放在.m文件中

其中需要注意的是#import,#include,@class区别:

1.#import和#include

区别在于#import不会引起交叉编译,他不会重复导入文件

因此尽量使用#import;

2.#import 和 @class

设像如果巨量文件import导入同一个头文件,或者传递导入头文件a->b->c...当基础头文件改变时,其余都要重新编译(一种依赖关系),会影响程序的效率,使用@class会避免出现此种情况。

原理:程序不加头文件无法工作是他不理解出现的陌生定义,情况A:他需要知道相应类的实例变量,超类等。情况B:他只需知道类名就行。

情况B:可用@class来替代#import,他告诉编译器别去深究这个类具体信息,这只是一个类名。或许不确切,可以理解为当成了一种数据类型(如类c由类A,B复合而成,则在其.h中可以不用#import导入A,B的头文件));

情况A:当类C继承自其他超类,而不是指针指向其他类,必须导入B.h.,当.m实现中用到了包含进来其他类的方法时,无法使用#import。

(为什么@class减少编译次数?不是每个类都有implementation中还是要用#import吗?理清self?为什么继承自超类就必须import难道复合而成的类就不许知道a,b的组成吗?)

原文地址:https://www.cnblogs.com/Ponytai1/p/6045112.html