第二条、在类的头文件中尽量少引入其他头文件

简介:

第二条、在类的头文件中尽量少引入其他头文件

当我们在一个类中去引入另一个类的时候,我们经常会这样使用:

#import "xxxx.h"
这是一种常见的方法,但是不够优雅。举个例子。在Driver类中
Driver.h

#import <Foundation/Foundation.h>

@interface Driver : NSObject

@property(nonatomic)NSString *name;
@property(nonatomic)NSString *driverCard;
@end
AI 代码解读

当我们想在该类中引入Car类时,即:

@property(weak)Car *myCar;
AI 代码解读

很明显我们一般都是:

  #import "Car.h"   
AI 代码解读

但是我们在编译一个使用了Driver类的文件时,我们不需要知道Car类的全部细节,只需要知道有个类名叫Car就好,所幸有个方法能把这个情况告诉编译器:

@class Car;   
AI 代码解读

此时Driver.h文件如下:

#import <Foundation/Foundation.h>
@class Car;
@interface Driver : NSObject

@property(nonatomic)NSString *name;
@property(nonatomic)NSString *driverCard;
@property(weak)Car *myCar;
@end
AI 代码解读

这叫做“向前声明(forward declaring)”该类。
Driver类的实现文件则需要引入Car的头文件,因为要使用Car,则必须要知道其所有接口细节。于是Driver实现头文件就是:
Driver.m

#import "Driver.h"
#import "Car.h"
@implementation Driver

@end
AI 代码解读

将其引入头文件的时机尽量延后,只在有需要的时候才引入,这样就可以减少类的使用者所需引入的头文件的数量。加入本例把Car.h引入到Driver.h中,那么只要引入Driver.h,就会一并引入Car.h中的所有内容。此过程若持续下去,则要引入许多根本用不到的内容,这样会增加编译时间。

总结

  • 除非确有必要,否则不要引入头文件。一般来说,应在某个类的头文件中使用向前声明来提及别的类,并在实现文件中引入那些类的头文件。这样做可以尽量降低类之间的耦合(coupling).
  • 有时无法使用向前声明,比如要声明某个类遵循一项协议。这种情况下,应尽量把“该类遵循某协议”的这条声明移至“class-continuation分类中”。如果不行的话,就把协议单独放在一个头文件中,然后将其引入。
目录
打赏
0
0
0
0
9
分享
相关文章
预处理详解(#和##运算符、命名约定、#undef​​、命令行定义​、条件编译、头文件的包含​)
预处理详解(#和##运算符、命名约定、#undef​​、命令行定义​、条件编译、头文件的包含​)
|
10月前
|
在编译的两个.o文件中有对同一个头文件的引用,因此在链接时出现结构体重复定义的问题怎么解决
在编译的两个.o文件中有对同一个头文件的引用,因此在链接时出现结构体重复定义的问题怎么解决
233 2
【C++语言】冲突-C语言:输入输出、缺省参数、引用、内联函数
【C++语言】冲突-C语言:输入输出、缺省参数、引用、内联函数
【C++语言】冲突-C语言:输入输出、缺省参数、引用、内联函数
引用头文件的操作
引用头文件的操作。
62 0
|
11月前
指针易混淆概念:*p++,*(p++),++(*p)
指针易混淆概念:*p++,*(p++),++(*p)
48 0
c++语言程序设计——头文件和引用系统头文件、用户头文件的定义及使用方法
c++语言程序设计——头文件和引用系统头文件、用户头文件的定义及使用方法
c++语言程序设计——头文件和引用系统头文件、用户头文件的定义及使用方法
头文件循环包含,导致找不到定义的类
头文件循环包含,导致找不到定义的类
133 0
【Android 逆向】函数拦截原理 ( 可执行程序基本结构 | GOT 全局偏移表 | 可执行程序函数调用步骤 )
【Android 逆向】函数拦截原理 ( 可执行程序基本结构 | GOT 全局偏移表 | 可执行程序函数调用步骤 )
270 0
【Android 逆向】函数拦截原理 ( 可执行程序基本结构 | GOT 全局偏移表 | 可执行程序函数调用步骤 )
C++防止头文件被重复引入的3种方法!
C++防止头文件被重复引入的3种方法!
595 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等