美文网首页iOS学习笔记iOS学习开发iOS Developer
iOS-静态库,动态库与FrameWork区别

iOS-静态库,动态库与FrameWork区别

作者: FlyElephant | 来源:发表于2017-05-09 09:51 被阅读239次

iOS开发过程中经常会用到第三方库,微信支付,支付宝支付,地图,即时通信的库,极大的提升了开发效率,如果公司项目比较大,也可以将常用的业务模块封装成库供内部使用.

基础概念

库作为共享程序的形式,分为静态库和动态库.

静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝.未见后缀名为.a和.frameWork

动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存. 文件后缀名为.dylib和.framework

FrameWork比较特殊可以是静态库也可以是动态库,系统的UIKit.frameWork是动态库,自己建立的或者第三方的.frameWork为静态库.

静态库.a是一个二进制文件,无法直接提供给外界使用,需要提供一个.h文件供外部调用,微信支付的提供了.a和.h文件.

静态库frameWork与.a最大不同的在于,资源文件和.h文件,例如即时通信的库文件一般为.frameWork因为内部需要提供给聊天的默认图片,Gif等资源文件,.frameWork在开发中更常见一些.

iOS8 & Swift

iOS 8 之前不支持动态FrameWork,iOS 8 之后添加了动态库的支持,主要原因是ExExtension 和 App 作为两个分开的可执行文件,同时需要共享代码,这种情况下动态库的支持就是必不可少的了.但是这种动态 Framework 和系统的 UIKit.Framework 还是有很大区别。系统的 Framework 不需要拷贝到目标程序中,我们自己做出来的 Framework 哪怕是动态的,最后也还是要拷贝到 App 中(App 和 Extension 的 Bundle 是共享的),因此苹果又把这种 Framework 称为 Embedded Framework。

Swift 跟着 iOS8 / Xcode 6 同时发布的,如果要在项目中使用外部的代码,可选的方式只有两种,一种是把代码拷贝到工程中,另一种是用动态 Framework.使用静态库是不支持的.
造成这个问题的原因主要是 Swift 的运行库没有被包含在 iOS 系统中,而是会打包进 App 中(这也是造成 Swift App 体积大的原因),静态库会导致最终的目标程序中包含重复的运行库.同时拷贝 Runtime 这种做法也会导致在纯 ObjC 的项目中使用 Swift 库出现问题。苹果声称等到 Swift 的 Runtime 稳定之后会被加入到系统当中,到时候这个限制就会被去除了.

相关文章

  • iOS 制作静态库

    制作静态库 动态库:.dylib .framework 静态库:.a .framework 两者区别*:动态库时在...

  • iOS开发集锦之 2017.04.17

    1. iOS 静态库,动态库与 Framework 浅析 作者:Jenaral描述: 静态库与动态库的区别;iOS...

  • iOS里的动态库和静态库

    介绍 动态库形式:.dylib和.framework 静态库形式:.a和.framework 动态库和静态库的区别...

  • 目录一、库二、静态库、动态库、Framework三、打包静态库 1、.a静态库和.framework静态库的区别 ...

  • iOS 封装.framework 以及使用

    .framework是什么? “静态库”和“动态库”有什么区别? iOS里静态和动态库形式 .a与.framewo...

  • iOS framework的具体合成步骤

    framework的方便之处 动态库和静态库 framework 和 .a的区别 framework 的合成步骤 ...

  • iOS静态库与动态库

    静态库与动态库 存在形式: ①静态库:.a 和 .framework②动态库:.dylib 和 .framewor...

  • Xcode7中创建静态库

    一、静态库和动态库的区别: 静态库和动态库是相对编译期和运行期的,静态库以 .a 和 .framework 形式存...

  • 创建静态库

    一、静态库和动态库的区别: 静态库和动态库是相对编译期和运行期的,静态库以 .a 和 .framework 形式存...

  • Embedded Binaries 和 Linked Frame

    1:iOS 动态库与静态库的区别(framework,.a,.dylib) 一点通俗的理解: 1)静态库:编译期间...

网友评论

    本文标题:iOS-静态库,动态库与FrameWork区别

    本文链接:https://www.haomeiwen.com/subject/tqrbtxtx.html