前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ios的动态库和静态库

ios的动态库和静态库

作者头像
码客说
发布2019-10-22 14:40:09
8120
发布2019-10-22 14:40:09
举报
文章被收录于专栏:码客码客码客

静态库和动态库有什么特点?

异同点:

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

共同点:

  • 静态库和动态库都是闭源库,只能拿来满足某个功能的使用,不会暴露内部具体的代码信息,而从github上下载的第三方库大多是开源库

这两种库都有哪些文件格式?

  • 静态库:.a.framework
  • 动态库:.dylib.framework系统直接提供给我们的framework都是动态库!)

当你创建一个framework文件时,系统“默认”是一个动态库的格式,如果想做成静态库,需要在buildSetting中将Mach-O Type选项设置为Static Library就行了!

.a文件和.framework文件组成的区别:

  • .a文件是一个纯二进制文件,不能直接拿来使用,需要配合头文件、资源文件一起使用。 将静态库打包的时候,只能打包代码资源,但是图片文件、本地json文件和xib等资源文件无法打包进去 使用.a静态库的时候需要三个组成部分:.a文件+需要暴露的头文件+资源文件
  • .framework文件内部除了有二进制文件(如下图黑色文件)之外还有其他的资源文件(相当于:.framwork文件=黑色二进制文件<.a文件+.h文件>+资源文件<图片、以及本地的html5,json,plist等),可以直接拿来在工程中使用。

静态库和动态库的制作方式

静态库和动态库的制作方式

制作静态库时的几点注意:

  1. 注意理解:无论是.a静态库还.framework静态库,我们需要的都是二进制文件+.h+其它资源文件的形式,不同的是,.a本身就是二进制文件,需要我们自己配上.h和其它文件才能使用,而.framework本身已经包含了.h和其它文件,可以直接使用。
  2. 图片资源的处理:两种静态库,一般都是把图片文件单独的放在一个.bundle文件中,一般.bundle的名字和.a或.framework的名字相同。.bundle文件很好弄,新建一个文件夹,把它改名为.bundle就可以了,右键,显示包内容可以向其中添加图片资源。
  3. category是我们实际开发项目中经常用到的,把category打成静态库是没有问题的,但是在用这个静态库的工程中,调用category中的方法时会有找不到该方法的运行时错误(selector not recognized),解决办法是:在使用静态库的工程中配置other linker flags的值为-ObjC
  4. 如果一个静态库很复杂,需要暴露的.h比较多的话,就可以在静态库的内部创建一个.h文件(一般这个.h文件的名字和静态库的名字相同),然后把所有需要暴露出来的.h文件都集中放在这个.h文件中,而那些原本需要暴露的.h都不需要再暴露了,只需要把.h暴露出来就可以了。

到底是用静态库还是动态库

动态库的优点多 现在苹果终于开放了当然要用动态库

WWDC2014给我的一个很大感触是苹果对iOS的开放态度:允许使用动态库、允许第三方键盘、App Extension等等。

划重点

Xcode 6后,创建的framework默认为动态库(证明苹果建议用动态库),使用时需要在Embedded Binariesadd你的framework否则会崩溃。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-10-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 静态库和动态库有什么特点?
  • 这两种库都有哪些文件格式?
  • .a文件和.framework文件组成的区别:
  • 静态库和动态库的制作方式
  • 制作静态库时的几点注意:
  • 到底是用静态库还是动态库
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档