Swift学习笔记之公用库和模块化

发布时间:2020-05-21 发布网站:编程之家
编程之家收集整理的这篇文章主要介绍了Swift学习笔记之公用库和模块化编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

静态库和动态库

先补充一下静态库和动态库的知识。这部分内容我也不太熟,没有开发经验,如有错误欢迎打脸。

静态库

静态库的代码追加到可执行文件内,被多次使⽤用就有多份冗余拷⻉。

好处就是应用程序包自身可以独立运行,而不好的地方就是包会略显臃肿,库不能共享。

iOS 中静态库的形式是 .a 和 .framework (自己创建的 .framework 是静态库)。

.a

.a 文件在真正使用的时候需要提供头文件和资源文件。以前 Xcode 中默认提供的就是这种方式。不过编译出来静态库只支持特定的一种硬件架构体系,如果你想生成一个 Universal 的静态库的话,需要通过工具来将多个静态库进行合并。而且使用的时候需要另外配合 .h 文件,相比之下 framework 会是更好的选择。

.framework

framework 不但可以包含二进制文件,还可以包含头文件,资源文件等,甚至可以支持多个版本。不过各个应用所使用的自己的公用库,最终都需要 link 进可执行文件,所以本质上还是一个静态库。

动态库

动态库的代码和可执行文件是分开独立的,程序运行时由系统动态加载到内存,系统只加载一次,多个程序共用节省内存。

动态库的优劣与静态库相反,动态链接库需要库环境,但由于本身不集成库内容,会比较小,同时也为和其他应用共享库的使用提供了可能。

iOS 中动态库的形式是 .dylib 和 .framework (系统的 .framework 是动态库)。

现状

出于安全层面的考虑, AppStore 不允许使用第三方的动态链接库。我们可以通过 framework 编写自己的公用库。随着 Xcode6 开始支持新建 framework ,再也不用手动配置了。iOS-Universal-Framework 也宣布停止更新。

模块

模块化 (modules) 是在 2012年的 LLVM Developers Meeting 中提出的。简单说就是用树形的结构化描述来取代以往的平坦式 #include ,对框架进行封装,从而解决以往方法的脆弱性和扩展性不足的问题。 (这段我也不太懂,只是翻译了一下。。。)

以 UIKit 为例, module.map 大概是这个样子:

framework module UIKit {  
    umbrella header "UIKit.h"
    module * {export *}
    link framework "UIKit"
}

使用的时候用 @import 即可。如果所有代码都需要这样重写必定是一项浩大的工程,所以 Apple 已经提前把这部分工作做好了。只要使用的是 iOS7 的 SDK,将 Enable Modules 打开后,然后保持原来的 #import 写法就行了,编译器会在编译的时候自动地把可能的地方换成 modules 的写法去编译。


References

总结

以上是编程之家为你收集整理的Swift学习笔记之公用库和模块化全部内容,希望文章能够帮你解决Swift学习笔记之公用库和模块化所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入编程之家官方QQ群:1065694478
编程之家官方公众号

微信公众号搜索 “ 程序精选 ” ,选择关注!

微信公众号搜索 “ 程序精选 ”
精选程序员所需精品干货内容!