ios静态库和framework区别(代码片段)

JoySeeDog JoySeeDog     2022-12-09     416

关键词:

什么是库

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

静态库与动态库的区别

静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。

动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。

iOS里静态库形式

.a.framework

iOS里动态库形式

.dylib.framework

framework为什么既是静态库又是动态库

系统的.framework是动态库,我们自己建立的.framework可以静态库,也可以是动态库 具体看这 http://foggry.com/blog/2014/06/12/wwdc2014zhi-iosshi-yong-dong-tai-ku/

a与.framework有什么区别

.a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件。

.a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。

.a + .h + sourceFile = .framework

建议用.framework.

为什么要使用静态库

方便共享代码,便于合理使用。

实现iOS程序的模块化。可以把固定的业务模块化成静态库。

和别人分享你的代码库,但不想让别人看到你代码的实现。

开发第三方sdk的需要。

制作静态库时的几点注意

注意理解

无论是.a静态库还.framework静态库,我们需要的都是二进制文件+.h+其它资源文件的形式,不同的是,.a本身就是二进制文件,需要我们自己配上.h和其它文件才能使用,而.framework本身已经包含了.h和其它文件,可以直接使用。

图片资源的处理

两种静态库,一般都是把图片文件单独的放在一个.bundle文件中,一般.bundle的名字和.a.framework的名字相同。.bundle文件很好弄,新建一个文件夹,把它改名为.bundle就可以了,右键,显示包内容可以向其中添加图片资源。

category处理

category是我们实际开发项目中经常用到的,把category打成静态库是没有问题的,但是在用这个静态库的工程中,调用category中的方法时会有找不到该方法的运行时错误(selector not recognized),解决办法是:在使用静态库的工程中配置other linker flags的值为-ObjC

复杂的静态库

如果一个静态库很复杂,需要暴露的.h比较多的话,就可以在静态库的内部创建一个.h文件(一般这个.h文件的名字和静态库的名字相同),然后把所有需要暴露出来的.h文件都集中放在这个.h文件中,而那些原本需要暴露的.h都不需要再暴露了,只需要把.h暴露出来就可以了。

参考文章

参考文章

组件化-动态库实战(代码片段)

...绍静态库和动态库的区别举个例子,iOS项目中使用EmbededFramework静态库和动态库如何构建和加载静态库和动态库依赖关系Xcode项目结构iOS依赖管理事实上的标准解决问题制作动态库剖析下动态库Framework吧回过头来看EmbenedFrameworkWhySw... 查看详情

ios静态库和动态库相关

参考技术A查看.a静态库和framework支持的架构示例:终端测试:iPhone真机和模拟器的CPU架构静态库和framework真机和模拟器库二合一首先,分别编译成真机framework和模拟器framework,接着,利用上面的命令查看各个framework的架构最后,... 查看详情

ios静态库打包流程简化(代码片段)

...库区别,可以看我的另外一篇博客:iOS静态库和Framework区别项目配置新建一个名为TestSDK的静态库工程然后点击Target下边的加号按钮,添加新的Target选择Cross-platform,新建一个Aggregate,命名为TestSDKShell可以看到TARGETS目录下... 查看详情

ios静态库打包流程简化(代码片段)

...iOS开发中,我们经常会遇到开发SDK的需求。开发好的静态库后需要手动的合并.a文件,然后再拷贝相关的头文件,接着把静态库和头文件放在同一个文件里面打包发送给SDK的使用者。本文将介绍如何使用脚本,简... 查看详情

详解linux下静态库/动态库的生成和使用(含代码示例和操作流程)&&动态库和静态库的区别(代码片段)

文章目录一、库的概念Windows的库Linux的库二、动态库和静态库的区别1.载入顺序不同2.大小与共享的差异3.库函数调用的差异三、静态库的创建和使用1.创建静态库的步骤:(一)ar命令的使用方法(二)生成静... 查看详情

静态库介绍与简单演练及同名资源冲突解决

...态库和动态库都是闭源库,不公开源代码。静态库:.a和.framework动态库:.dylib和.framework(iOS9取消了.dylib,使用.tbd替代) 2、静态库和动态库在使用上的区别:静态库:链接时,静态库中使用的文件会被完整的复制到可执行文件... 查看详情

ios之深入解析静态库和动态库(代码片段)

一、库①什么是库?库就是程序代码的集合,将N个文件组织起来,是共享程序代码的一种方式。从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。②库的分类根据程序代码的开源情况,... 查看详情

ios静态库和动态库打包framework流程(纯swift版/swift、oc混编版)

参考技术A选择iOS--Framework&Library,点击next如果打包文件中使用了第三方库,建议pod管理,并告知用户使用pod安装,避免用户重复导入。跟平时开发逻辑一样,打开.xcworkspace工程。操作完之后工程目录显示把打包需要的文件添加... 查看详情

ios中的静态库和动态库(代码片段)

...制格式,可以被载入内存中执行。库的类型一般分为静态库和动态库。静态库一般是xxx.a的形式,动态库一般在windows下是xxx.dll、在Linux下是xxx.so,在Mac下是系统的动态库是xxx.tbd(以前为.dylib)的形式。静态库利用静态函... 查看详情

ios中的静态库和动态库(代码片段)

...制格式,可以被载入内存中执行。库的类型一般分为静态库和动态库。静态库一般是xxx.a的形式,动态库一般在windows下是xxx.dll、在Linux下是xxx.so,在Mac下是系统的动态库是xxx.tbd(以前为.dylib)的形式。静态库利用静态函... 查看详情

共享库和静态库的使用区别

】共享库和静态库的使用区别【英文标题】:Differenceofusagebetweensharedandstaticlibrary【发布时间】:2016-12-2316:20:31【问题描述】:我有一个非常简单的代码示例:#include<iostream>#include"libMPSSE_spi.h"intmain()uint32channels=0;std::cout<<"... 查看详情

Xcode for iPhone 中静态库和动态库的区别

】XcodeforiPhone中静态库和动态库的区别【英文标题】:DifferencebetweenstaticanddynamiclibraryinXcodeforiPhone【发布时间】:2010-09-1605:03:34【问题描述】:XCode中的静态库和动态库有什么区别?为什么Apple不允许我们在iOS应用程序中使用动态... 查看详情

windows静态库和动态库区别

个人建议:能使用静态库的就不要使用动态库,能使用隐式调用的就不要用显示调用。注意:    (1)动态库中的.lib文件叫做导入库,对于导入库而言,其实际的执行代码位于动态库中,导入库只包含了地址符号... 查看详情

cgo静态库和动态库(代码片段)

CGO静态库和动态库CGO在使用C/C++资源的时候一般有三种形式:直接使用源码;链接静态库;链接动态库。直接使用源码就是在import"C"之前的注释部分包含C代码,或者在当前包中包含C/C++源文件。链接静态库和动态库的方式... 查看详情

动态库和静态库的区别

参考技术A函数库分为静态库和动态库两种。 查看详情

linux下的动态库和静态库详解(代码片段)

动态库和静态库文章目录动态库和静态库静态库与动态库的概念理解动静态库如何打包动静态库与如何使用动静态库如何制作打包动态库为什么我们要使用别人(一般是顶尖的工程师写的)的代码?为了开发效率和鲁棒性(健壮... 查看详情

静态链接库和动态链接库(代码片段)

静态链接库和动态链接库共有两种库:一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamiclinklibrary。一种是LIB包含函数代码本身,在编译时直接... 查看详情

静态库和共享库(代码片段)

...码实现,就可以将源代码编译成库提供。库分为共享库和静态库。静态库在程序的链接阶段被复制到了程序中,和程序运行的时候没有关系。动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中供... 查看详情