欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

IOS 头文件导入-@class注意事项总结

程序员文章站 2023-12-19 18:50:40
ios 头文件导入-@class注意事项总结 一,导入头文件有两种不同的方法: 使用引号或者使用尖括号,例如,#import ...

ios 头文件导入-@class注意事项总结

一,导入头文件有两种不同的方法:

使用引号或者使用尖括号,例如,#import <cocoa/cocoa.h>和#import "tire.h".带尖括号的语句是用来导入系统头文件的,而带引号的语句则说明导入的是项目本地的头文件,如果你看到的头文件名是用尖括号括起来的,那么这个头文件对你的项目来说是只读的,因为它属于系统。如果头文件名是被引号括起来的,那么你(或参与这个项目的其他人)就可以编辑它。

二,objective-c提供了一种方法能够减少由依赖关系引起的重新编译所带来的影响。

依赖关系问题的存在是因为objective-c编译器需要某些信息才能够工作。有时,编译器需要知道类的全部信息,例如它的实例变量配置,它所继承的所有类等。而有的时候,编译器只需要知道类名即可,不需要了解它的整个含义。

     例如,对象复合后,这个复合使用指向对象的指针。这样之所以能行得通,是因为所有objective-c对象都存放在动态分配的内存中。编译器只需要知道这是一个类就可以了。然后它就地发现这个实例变量是指针的大小,而这个指针的大小在整个程序中都不会改变。

    objective-c引入了关键字@class来告诉编译器:“这是一个类,所以,我只需要通过指针来引用它。”这样编译器就会“平静”下来:它并不需要知道关于这个类的更多信息,只要了解它是通过指针来引用的即可。

    @class创建了一个前向引用。就是在告诉编译器:“相信我,以后你会知道这个类到底是什么,但是现在,你只需要知道这些”,如果有循环依赖关系,@class也很有用。即a类使用b类,b类也使用a类。如果试图通过#import语句让这两个类互相引用,那么最后就会出现编译错误。但是如果在a.h中使用@class b,在b.h中使用@class a,那么这两个类就可以互相引用了。

三,有时候,我们在文件中导入了engine.h而没有导入<cocoa/cocoa.h>,这是为什么呢?

我们知道,engine.h中已经导入了<cocoa/cocoa.h>,所以,不需要我们自己再导入一遍了。然而,如果你想在该文件里加上#import <cocoa/cocoa.h>,这是可以的,因为#import命令具有足够的智能,它不会重复导入自己的文件。 

四,在学习过程中,我们认识了跨文件依赖关系,在这种关系中,头文件或源文件需要使用另一个头文件中的信息。

文件之间互相重复的导入会增加编译次数,也会导致不必要的重复编译。而巧妙地使用@class命令能够减少编译时间,@class告诉编译器“相信我,你最终能够了解这个名称的类”,它可以减少不得不导入的头文件数量。

 参考资料:《objective-c基础教程》

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

上一篇:

下一篇: