第二条、在类的头文件中尽量少引入其他头文件
其他 引入 头文件
2023-09-14 08:58:20 时间
第二条、在类的头文件中尽量少引入其他头文件
当我们在一个类中去引入另一个类的时候,我们经常会这样使用:
#import "xxxx.h"
这是一种常见的方法,但是不够优雅。举个例子。在Driver类中
Driver.h
#import Foundation/Foundation.h @interface Driver : NSObject @property(nonatomic)NSString *name; @property(nonatomic)NSString *driverCard; @end
当我们想在该类中引入Car类时,即:
@property(weak)Car *myCar;
很明显我们一般都是:
#import "Car.h"
但是我们在编译一个使用了Driver类的文件时,我们不需要知道Car类的全部细节,只需要知道有个类名叫Car就好,所幸有个方法能把这个情况告诉编译器:
@class Car;
此时Driver.h文件如下:
#import Foundation/Foundation.h @class Car; @interface Driver : NSObject @property(nonatomic)NSString *name; @property(nonatomic)NSString *driverCard; @property(weak)Car *myCar; @end
这叫做“向前声明(forward declaring)”该类。
Driver类的实现文件则需要引入Car的头文件,因为要使用Car,则必须要知道其所有接口细节。于是Driver实现头文件就是:
Driver.m
#import "Driver.h" #import "Car.h" @implementation Driver @end
将其引入头文件的时机尽量延后,只在有需要的时候才引入,这样就可以减少类的使用者所需引入的头文件的数量。加入本例把Car.h引入到Driver.h中,那么只要引入Driver.h,就会一并引入Car.h中的所有内容。此过程若持续下去,则要引入许多根本用不到的内容,这样会增加编译时间。
除非确有必要,否则不要引入头文件。一般来说,应在某个类的头文件中使用向前声明来提及别的类,并在实现文件中引入那些类的头文件。这样做可以尽量降低类之间的耦合(coupling). 有时无法使用向前声明,比如要声明某个类遵循一项协议。这种情况下,应尽量把“该类遵循某协议”的这条声明移至“class-continuation分类中”。如果不行的话,就把协议单独放在一个头文件中,然后将其引入。相关文章
- 制作opc服务器,力控服务器怎样做为OPC服务器,供其他OPC客户端程序访问
- 第一高分大省——河北,新高考正式执行,权威政策解读来了!其他省很可能参照河北模式!
- 虹科分享 | 网络流量监控 | 构建大型捕获文件(Ⅰ)——Wireshark过滤器和其他Allegro网络万用表工具
- ensp usg6000无法ping通其他节点PC,web登录
- 小明投影仪以及其他投影仪/机顶盒/电视机如何开启ADB调试模式教程
- 如何使用Zuthaka管理不同APT和其他后渗透工具
- Go语言import导入包——在代码中使用其他的代码
- java中this语句来调用其他构造方法的规则详解编程语言
- 微软在新的宣传中强调Win11小工具和其他功能
- 其他工具使用的技巧(mysql配合)
- 在MSSQL中跨台电脑的访问实例化之旅(mssql访问其他电脑)
- 探索Redis之外的可行选择替代Redis的其他数据库(与redis相似的数据库)
- 用其他方式解决缓存问题(不用redis写缓存)
- 大厂放弃Redis,转向其他缓存技术的探索(大厂放弃redis使用)
- MySQL试用无法使用,请尝试其他方案(mysql不能点击试用了)
- 数据利用Redis抓取其他数据库中的数据(redis获取其他db)