静态库和动态库

1.库:
    库是程序代码的集合,是共享代码的一种方式。根据源代码的公开情况,可以分为开源库和闭源库。
闭源库主要分为静态库和动态库。

2.静态库和动态库
静态库:.a和.framework形式
动态库:.dylib和.framework形式
区别:链接时,静态库会被完整的复制到可执行文件中,如果被多次使用,则就拷贝多次;动态库在链接
时不复制,程序运行时由系统动态加载到内存供程序调用,系统只加载一次,多个程序共用,节省内存。
注意:
1> 如果项目中使用了自己定义的动态库,则无法发布到APPStore
2> 两者都有framework的格式,但是当你创建一个framework文件时,系统默认是动态库的格式,如果想做成静态库,需要在buildSetting中将Mach-O Type选线设置为Static Library 就行了。

3.静态库的制作
1> 首先创建库项目
2> 创建自己的工具文件
3> target->Build Phases->Copy Files中添加头文件
4> 分别选择真机和模拟器进行编译

4.查看静态库所支持的平台
1> 终端指令:
    lipo -info xxx.a
2> 合成静态库
把开发环境和生产环境的静态库和成一个的终端指令为:
    lipo -create Debug-iphoneos/libMathlib.a Debug-iphonesimulator/libMathlib.a -output mathlib/MathTool.a
3> 注意
    我们会发现上面的静态库都是debug版本的,我们也可以设置release版本的:
点击工程->Edit schema->Run->Info->修改Build Configurationrelease
    一般在开发中不用合成的静态库,因为合成后的静态库太大了。

5.在工程中边开发静态库边调试
1> 创建一个正常的工程
2> 配置targets->build Phases->target Dependencies->Link Binary WithLibraries

6. .a文件和.framework文件的区别
 .a是一个纯二进制文件,不能直接拿来使用,需要配合头文件、资源文件一起使用。

  将静态库打包的时候,只能打包代码资源。图片、本地json文件和xib等资源文件无法打包进去,使用.a静态库的时候需要三个组成部分:.a文件+需要暴露的头文件+资源文件;

  .framework中除了有二进制文件之外还有资源文件,可以拿来直接使用。
7. 制作静态库时需要注意一下几点:
1> 无论是.a静态库还是.framework静态库,我们需要的都是二进制文件+.h+其它资源文件形式,不同的是,.a本身就是二进制文件,需要我们自己配上.h和其它文件才能使用;而.framework本身已经包含了.h和其它文件,可以直接使用。
2> 图片资源的处理:两种静态库,一般都是把图片文件单独放在一个.bundle中,一般.bundle的名字和.a或.framework的名字相同。.bundle文件非常容易制作,新建一个文件夹,把它改名为.bundle就可以了,右键,显示包内容可以向其中添加图片资源。
3> category是我们实际开发中经常用到的,把category打成静态库是没有问题的,但是在使用这个静态库的时候,调用category中的方法时会有找不到该方法的运行时错误(selector not recognized) ,解决办法是:在使用静态库的工程中配置other linkerflags的值为-ObjC
4> 如果一个静态库很复杂,需要暴露的.h比较多的话,就可以在静态库的内部创建一个.h文件(一般这个.h文件的名字和静态库的名字相同),然后把所有需要暴露出来的.h文件都集中放在这个.h文件中,而那些原本需要暴露的.h都不需要再暴露了,只需要把.h暴露出来就可以了。
8. framework动态库的主要作用
  framework本来是苹果专属的内幕提供的动态库文件格式,但是自从2014WWDC之后,开发者可以自定义创建framework实现动态更新(绕过apple store审核,从服务器发布更新版本)的功能,这与苹果限定的上架的app必须经过apple store的审核制度是冲突的,所以含有自定义的frameworkapp是无法上架的,但是如果开发的是企业内部应用,就可以考虑尝试使用动态更新技术来将多个独立的app或者功能模块集成在一个app上面!(笔者开发的就是企业内部使用的app,我们将企业官网中的板块开发成4个独立的app,然后将其改造为framework文件集成在一款平台级的app当中进行使用)

目前 iOS 上的动态更新方案主要有以下 4 种:

HTML 5
luawaxhotpatch
react native
framework
前面三种都是通过在应用内搭建一个运行环境来实现动态更新(HTML 5 是原生支持),在用户体验、与系统交互上有一定的限制,对开发者的要求也更高(至少得熟悉 lua 或者 js)。

使用 framework 的方式来更新可以不依赖第三方库,使用原生的 OC/Swift 来开发,体验更好,开发成本也更低。

由于 Apple 不希望开发者绕过 App Store 来更新 app,因此只有对于不需要上架的应用,才能以 framework 的方式实现 app 的更新。
9. 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值