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

除非有必要,否则不要引入头文件。一般来说,应在某个类的头文件中使用向前声明来提交别的类,并在实现文件中引入那些类的头文件。这样做可以尽量降低类之间的耦合(coupling)。

有时候无法使用向前声明,比如要声明某个类遵守一项协议。在这种情况下,尽量吧“该类遵守某协议”的这条声明移至“class-continuation分类”中。如果不行的话,就把协议单独放在一个头文件中,然后将其引入。

向前声明:

@class xxxx;

这种格式的声明就是向前声明,它仅告诉编译器该类是存在的,隐藏了具体的细节,而不是无脑引入该文件所有内容。

这样我们在.h文件中就可以使用这样的声明代替#import,因为仅仅在.h中无须知道引入类的所有借口细节。

在.m文件中,要用到引入的类,所以需要其具体的实现,这就需要使用#import导入类。 

上述做法将引入头文件的时机延后,可以减少类的使用者所需引入的头文件数量,减少编译时间。

两个类互相引用:向前声明也可以解决这个问题。 假如a和b需要互相引入对方,则在a的.h中#import b 在b的.h中#import a

这样会导致循环引用,结果会导致两个类中的一个无法正确编译。

但是:

1.如果写的类继承了某个父类,需要引入定义哪个父类的头文件,不能使用向前声明。

2.引入协议的类,不能使用向前声明,因为需要知道协议中定义的方法。

可以这样:

如果是委托协议的话,可以放到.m文件中的“class-continuation分类”里面,这样只要在文件的实现中引入,而无需在公共头文件中引入。

总结:

每次在头文件中引入其他头文件的时候,先想想有没有必要。如果可以用向前声明代替则使用。

否则看看能不能尽量放到文件的实现中。

这样可以减少编译时间,还可以降低彼此的依赖程度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值