iOS之《Effective Objective-C 2.0》读书笔记(2)

第二条 : 在类的头文件中尽量少引用其他头文件
1.#import、#include和@class的区别解析

(1)#include:

  定义:C/C++里面导入头文件的预处理指令
  缺点:易引入循环引用,一般不使用

(2)#import:

 定义:OC里面导入头文件的预处理指令
 缺点:把被引用类的头文件走一遍,即把.h文件里的变量和方法包含进来一次,且仅一次,会影响编译效率

(3)@class

 定义:OC里面导入头文件的预处理指令
 优点:告诉编译器某个类的存在,使之不发出警告或者错误,但是里面的实现并不知道,会提高编译效率,推荐使用
 常用方式:在头文件中@class,在实现文件中#import
2.在具体项目中pch文件的应用

(1)pch的作用:该文件里面的内容是全局的,可以用来引入宏定义,头文件等

 细节解析:
 (1)该文件中导入的文件和其他一些内容会被提前编译,所以当项目真正编译时,这些内容可直接载入,可以使编译过程加速
 (2)编译阶段时的本质操作就是在每个文件开头导入头文件:#import "xxx.pch"

(2)pch的配置:网上资源众多,此处不是重点,故不赘谈
(3)pch的缺点:

1)项目移植时,不利于代码的移植:从A项目移植到B项目中时,需要重新配置,否则会丢失很多文件

 (2)源文件被复用到另一个项目时,会造成隐式依赖:这些依赖关系并不能从导入的头文件处看清楚,而是会看到一些报错信息。而在对应的源文件中导入头文件时,能够有效避免此种情况

 (3)头文件过多,会使首次进入APP的时间变长:首次进入app时会进行预编译,如果PCH中的头文件很多且很大,会造成预编译的过程便的缓慢,体验效果欠佳

(4)Modules的引入:参考

学习Modules:
(1)作用:可以更好地替代预编译头文件pch,同时解决了编译时间和引用泛滥两方面的问题
(2)配置要求:只能针对Xcode7及以上的SDK
(3)具体使用:@import UIKit;
(4)参考内容 :Modules相当于在编译时载入了一个框架的已经编译的版本。其实质是将框架进行了封装,然后在实际编译之时加入了一个用来存放已编译添加过的Modules列表。如果在编译的文件中引用到某个Modules的话,将首先在这个列表内查找,找到的话说明已经被加载过则直接使用已有的,如果没有找到,则把引用的头文件编译后加入到这个表中。这样被引用到的Modules只会被编译一次,从而同时解决了编译时间和引用泛滥两方面的问题。所以抛弃预编译头文件不会丢失加速编译的特性,还可以避免其带来的改动导致全局重新编译和依赖显示不明确的弊端           

(5)小总结:

a:我们公司的项目中,一直使用pch文件来定义宏和导入近乎所有的头文件,而且在今天以前我一直认为这样做很方便,省去了单独配置某个文件的依赖文件的麻烦
  #import "Config.h"  //宏定义
  #import "AFNetworking.h"  //第三方 
  #import "NSUserDefaults+DESRW.h" //类目
  #import "LogInViewController.h"  //项目文件
  #import "Singleton.h"   //单例

b:今天学习了pch的三个缺点,其中只有第三个知识点让我觉得在pch中添加过多头文件会对我的项目有实际影响,至于前两个缺点,只有在迁移项目/复用代码时才会产生问题

c:今天还学到了一个新知识点-Modules,首先我对这个知识点了解不深,还有待深入学习,其次在下一个项目中会尝试使用它代替pch,或者两者同时使用
3.在Swift文件中头文件的使用

(1)Swift和OC的区别:swift 不需要import别的文件,就能直接用这文件中的类,因为编译器默默地做了处理

(2)在Swift中使用OC:建立桥接文件

 项目-Bridging-Header

(3)在OC中使用Swift:可以使用所有Swift文件

 #import "项目-Swift.h" //swift头文件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值