1. 导入objective c的头文件时用#import,包含c/c++头文件时用#include。
假如有两个类 EOCPerson 和 EOCEmployer ,这两个类各自的头文件中都引入了对方的头文件,则会导致"循环引用",当解析其中一个头文件时,编译器会发现它引入了另一个头文件,而那个头文件又回过头来引用第一个头文件,如果使用#improt而非#include指令则不会导致死循环,也就是说#import确保一个头文件只能被导入一次,这使你在递归包含中不会出现问题,所以 #import比起#include的好处是不会引起交叉编译
2.虽然#improt不会导致死循环,但是却意味着这两个类里面有一个是无法被正确编译的,所以我们就要用到向前声明@Class,如果你在编译时只需要知道有EOCEmployer这个类,而不需要知道EOCEmployer类的全部细节,这个时候,你就可以使用@Class,如果你需要使用EOCEmployer类,则必须知道该类的所有接口细节,这个时候,就需要#improt
3.将引入头文件的时机尽量延后,只有在确有需要的时候引用,这样就可以减少类的使用者所需引入的头文件的数量,因为只要#improt头文件以后,就会知道该类的所有细节,会引入许多根本就用不到的内容,增加编译时间
4.有些时候必须要在头文件中引入其他头文件,入股你写的类继承自某个超类,则必须引入定义那个超类的头文件,同理,如果要声明你写的类遵从某个协议,那么该协议必须有完整定义,且不能使用向前声明.向前声明只能告诉编译器有某个协议,而此时编译器却要知道该协议中定义的方法
网友评论