.a与.framework

一、库:
库是共享程序代码的方式,一般分为静态库和动态库

库的作用:1、一些不用经常动的代码,为减少编译时间,将其打成库,因为库是已经编译好的二进制文件,编译的时候只要link即可,不会浪费编译时间

Link分两种:动态 静态所以才有动态库和静态库

静态库:之所以叫做静态,是因为静态库在编译的时候会被直接拷贝一份,复制到目标程序里,这段代码在目标程序里就不会再改变了,静态库的好处很明显,编译完成之后,库文件实际上就没有作用了。目标程序没有外部依赖,直接就可以运行。当然其缺点也很明显,就是会使用目标程序的体积增大。

动态库: 与静态库相反,动态库在编译时并不会被拷贝到目标程序中,目标程序中只会存储指向动态库的引用。等到程序运行时,动态库才会被真正加载进来;优点:1、不需要拷贝到目标程序中,不会影响目标程序的体积,而且同一份库可以被多个程序使用(因为这个原因,动态库也被称作共享库)。2、编译时才载入的特性,也可以让我们随时对库进行替换,而不需要重新编译代码

缺点:动态载入会带来一部分性能损失,使用动态库也会使得程序依赖于外部环境。如果环境缺少动态库或者库的版本不正确,就会导致程序无法运行(Linux 下喜闻乐见的 lib not found 错误)

               2、想让其他人用代码,但又不愿意暴露源码

二、静态库与动态库的区别:
静态库:连接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。
动态库:连接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。

三、iOS静态库形式和动态库形式:
静态库:.a和.framework
动态库:.dylib和.framework

四、framework静态库和动态库的区分:
系统的.framework是动态库,我们自己建立的.framework是静态库

五、.a和.framwork的区别:
.a是一个纯二进制文件,.framework中除了有二进制文件外还有资源文件。
.a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。
.a + .h + sourceFile = .framework

动态库与静态库区别:

window/unix/mac与ios平台独有

 是否在编译的时候发生行为:

对程序体积的影响

静态库

.lib / .a  /.framework

 会复制一份库到目标文件

变大

动态库

.dll / .dylib .tbd /.framework

 会存储指向动态库的引用

不影响

Framwork既可以是静态库也可以是动态库,那如何区分framework是静态库还是动态库呢?

File命令查看.framework的二进制文件,即可知道是静态库还是动态库

若包含 current ar archive是静态库;如果framwork里有动态库的明显后缀或有dynamically linked

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值