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

问题原因

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

#import <AudioToolbox/AudioToolbox.h>

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

众所周知,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,我也只是简单了解了一下,希望能起到一个抛砖引玉的作用,有心的用户可以多去了解一下这方面的资料。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,038评论 3 119
  • 我就是一根甘蔗,直,不会拐弯抹角,一就是一,二就是二,虽然这样的性格吃不开,容易得罪人,但我还是喜欢这样的自己,不...
    M青衫不改旧人还阅读 1,501评论 0 0
  • ✔静√智√勇√仁√强√礼 小结: 上午读完了《哈尔罗杰历险记》之《智擒大猩猩》,开始读《神秘海底城》。妈妈忙着打电...
    妈妈熊阅读 1,495评论 0 0
  • 昨天收到一位朋友的简信,写了很长的文字,里面包含了学习、生活、工作、减肥等各方面的苦恼。她说:她想减肥,现在每天早...
    关家大小姐阅读 8,695评论 11 19
  • 阴冷 城市像是在下雨 浸湿了我的日记本 于是 又多写了几句 陪伴着昨晚没能刮完的风 风向 北东 时间把来时的欢喜追...
    DK314阅读 812评论 0 0