写iOS程序时可以不用导入Foundation和UIKit框架的原因

问题原因

之前也没有想过这个问题,最近想研究一下音视频硬编码的一些问题,然后在看博客的时候,发现有人提出了,音频硬编码的时候

#import 

这句引入头文件的代码去掉之后,代码可以照常编译运行,就质问博主写的是否是音频硬编码,下面就来解释一下,这是为什么?

众所周知,Foundation和UIKit中定义了iOS中所有对象的基类,要想开发一个在iOS上运行的应用,就不可避免的使用它们,但曾几何时,写代码的时候,你是否发现,你再也不用导入Foundation框架了,原因就是Xcode中创建一个新的iOS项目时,有些框架默认会被自动包括在内,已经不需要重新导入了。

下面就来分析一下,Xcode是怎么导入这些框架的。

解答:模块 (Modules)

Modules第一次在Objective-C中公共露面是在2012 LLVM开发者大会上Apple’s Doug Gregor的一次谈话。

Modules封装框架比以往任何时候更加清洁。不再需要预处理逐行地用文件所有内容替换#import指令。相反,一个模块包含了一个框架到自包含的块中,就像PCH文件预编译的方式一样提升了编译速度。并且你不需要在PCH文件中声明你要用到哪些框架,使用Modules简单的获得了速度上的提升。

一个Modules不仅告诉编译器哪些头文件组成了Modules,而且还告诉编译器什么需要链接。这个就解救了你不用你去手动的链接框架。这虽然是一件小事,但是能让开发更加简单就是一件好事。

怎样使用Modules

Modules的使用相当简单。对于存在的工程,第一件事情就是使这个功能生效。你可以在项目的Build Settings通过搜索Modules找到这个选项,改变Enable Modules 选项为YES,像这样:

image.png

所有的新工程都是默认开启这个功能的,但是你应该在你所有存在的工程内都开启这个功能。

Link Frameworks Automatically:这个选项就是用来开启或者关闭自动连接框架功能的,默认是开启的,如果一旦关闭这个选项,你的工程就会报一大堆的错误了,用户可以试一试,关闭这个功能,然后你必须手动导入一个一个框架,这对于开发者来说,无疑是一个灾难性的事件。

总结

其实本文要说的重点就是Modules 和 Link Frameworks Automatically,我也只是简单了解了一下,希望能起到一个抛砖引玉的作用,有心的用户可以多去了解一下这方面的资料。

你可能感兴趣的:(写iOS程序时可以不用导入Foundation和UIKit框架的原因)