[Swift]Day16:公共库和模块化

公用库和模块化

静态库和动态库

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

静态库

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

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

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

时间: 2024-08-09 10:43:57

[Swift]Day16:公共库和模块化的相关文章

cocoapods 创建公开公共库

1 :首先安装了 pod,sourceTree(下载地址https://pan.baidu.com/s/1c1Wc5ck), 并在开元中国申请的 git 账号 2 :打开终端: cd 文件目录地址 3 :在终端中输入命令行:pod lib create 项目名称        // 这里是从官方下载模板下载的地址在你cd 的文件加下 4 : 之后会提示出输入一些信息 What is your email? > 这里输入你开元中国的邮箱账号 What language do you want to

使用Redirector插件解决googleapis公共库加载的问题

最近访问一些面向国外的网站总是会出现ajax.googleaips.com无法加载的情况.以下为加载stackoverflow时的情境: 图1 -无法加载的google公共库 问题的原因是谷歌没有在国内开放ajax公共库服务 使用Redirector解决公共库加载问题 Redirector这个插件的功能正如它的名字, 可以对网页中的内容进行重定向 外部样式表,外部脚本, 图片等均可以添加至作用范围 安装 Redirector目前支持Firefox.Chrome.Opera三款浏览器,可以前往对应

百度静态资源(JS)公共库

     例如: chosen http://apps.bdimg.com/libs/chosen/1.1.0/chosen.jquery.min.js classlist http://apps.bdimg.com/libs/classlist/2014.01.31/classList.min.js cookies.js http://apps.bdimg.com/libs/Cookies.js/0.4.0/cookies.min.js dojo http://apps.bdimg.com/l

Eclipse中Android公共库的正确建立及调用方法(转)

转自http://www.cnblogs.com/SkyD/archive/2011/09/01/2161502.html 引言 之前一直头痛于没有办法在多个程序中共享资源,用作公共类库的方法也是使用的导出jar再导入的办法,现在终于初步搞明白了,可算解脱了~,分享出来. 建立公共库 首先建立公共库的Android项目,名为MyCoreLib: 完成后在左侧包浏览器里右键点选我们新建的这个项目,选择Properties项: 左侧选择Android分类,右侧勾选Is Library选项: 完成后在

Android公共库——图片缓存 网络缓存 下拉及底部更多ListView 公共类

Android公共库--图片缓存 网络缓存 下拉及底部更多ListView 公共类 转载自http://www.trinea.cn/android/android-common-lib/ 介绍总结的一些android公共库,包含缓存(图片缓存.预取缓存.网络缓存).公共View(下拉及底部加载更多ListView.底部加载更多ScrollView.滑动一页Gallery).及Android常用工具类(网络.下载.shell.文件.json等等). TrineaAndroidCommon已开源,地

项目之间的公共库引用和联调方法整理

很多时候我们在搭建每个项目框架的时候,总会有些公共的类库需要引用,如果每个项目都引入源码,会出现这样的情况:某个项目更新了公共类库,那么每个项目引用过的都需要再拷贝代码同步(可以使用Beyond Compare对比然后进行修改,总的来说项目一多,时间一久就会很乱且用的时间越多,非常不靠谱!):所以下面我研究了几种方式: 1.[这个好处是最多的,联调.最新修改的代码都解决了]如果公司使用的SVN(git的方式差不多),那么可以用svn的external功能,在每个项目上用external迁出公共库

windows平台下和跨平台的相关公共库

以下主要包含windows下公共库以及跨平台公共库: 1. google base库:google下chromium项目的跨平台公共库: 2. vc_common_src:即HP_SOCKET项目中的公共库: 3. dlib:跨平台公共库,比较综合的各种库: 4. stlsoft:包含windows和linux下封装的工具库,如文件.资源.句柄.指针等:

公共库

新浪SAE公共资源 推荐指数★★★ 支持https http://lib.sinaapp.com/js/jquery/2.0.3/jquery-2.0.3.jshttp://lib.sinaapp.com/js/jquery/1.8.2/jquery.min.jshttp://lib.sinaapp.com/js/jquery-mobile/1.3.1/jquery.mobile-1.3.1.js更多版本: http://lib.sinaapp.com/ Microsoft Ajax CDN 推

国内网站常用的一些 CDN 公共库加速服务

CDN公共库是指将常用的JS库存放在CDN节点,以方便广大开发者直接调用.与将JS库存放在服务器单机上相比,CDN公共库更加稳定.高速.一 般的CDN公共库都会包含全球所有最流行的开源JavaScript库,你可以在自己的网页上直接通过script标记引用这些资源.这样做不仅可以为您 节省流量,还能通过CDN加速,获得更快的访问速度. 为便于广大程序员的选择.使用,本文将网上的多篇文章合并为此文. 百度CDN公共库 百度公共CDN为站长的应用程序提供稳定.可靠.高速的服务,包含全球所有最流行的开