小工具      在线工具  汉语词典  css  js  c++  java

iOS静态库和动态库(详细库讲解)

IOS 额外说明

收录于:92天前

什么是图书馆?

库是程序代码的集合。组织N个文件是共享程序代码的一种方式。库本质上是可执行代码的二进制格式,可以加载到内存中并执行。

图书馆分类

  • 开源库:源代码是公开的,可以看到各个实现文件(.m文件)的实现,如GitHub上常用的开源库:AFNetworking、SDWebImage等;
  • 闭源库:不公开源代码,是经过编译后的二进制文件,看不到具体的实现。闭源库又分为:静态库 和 动态库

    1、Linux中静态库和动态库的区别:

    库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。

    静态库:此类库的名称通常为libxxx.a;使用静态函数库编译出来的文件比较大,因为整个函数库的所有数据都会集成到目标代码中,而且它的优点很明显,就是编译出来的可执行程序不需要外部函数库支持因为使用的所有函数都已经编译进去了。当然,这也可能是一个缺点,因为如果静态函数库发生变化,你的程序必须重新编译。

    动态库:此类库的名称通常为libxxx.so;与静态函数库相比,动态函数库在编译时不会被编译到目标代码中。你的程序只有在执行相关函数时才会调用函数库。相应的函数,因此动态函数库生成的可执行文件较小。由于函数库不是集成到你的程序中,而是在程序运行时动态请求和调用的,所以程序的运行环境中必须提供相应的库。对动态函数库的修改不会影响你的程序,因此升级动态函数库更加方便。

    2、iOS开发中静态库和动态库的区别:

    静态库和动态库在编译时和运行时是相对的。的:静态库在程序编译时会被链接到目标代码中,程序运行时将不再需要改静态库;而动态库在程序编译时并不会被链接到目标代码中,只是在程序运行时才被载入,因为在程序运行期间还需要动态库的存在。

    静态库的好处

    1. 模块化和分工提高了代码重用和核心技术的保密性。
    2. 避免经常导致大量重新编译和链接的小更改
    3. 它还可以重复使用。请注意,它不会被共享。

    动态库的优点:

    1. 使用动态库,可以减少最终可执行文件的大小,将整个应用程序划分为模块,以团队方式工作,分工明确,影响相对较小。
    2. 使用动态库,多个应用程序共享内存中的同一个库文件,从而节省资源。
    3. 使用动态库,您可以通过更新动态库文件来更新您的应用程序,而无需重新编译和链接可执行程序。
    4. 应用插件
    5. 软件版本实时模块升级
       
    6. 在大多数其他平台上,动态库可用于在不同应用程序之间共享和共享可执行文件,从而显着节省内存。
      在iOS8之前的iOS平台上,苹果不允许动态加载第三方框架。从 iOS 8 开始,开发者可以有条件地创建和使用动态帧。这个框架称为Cocoa Touch Framework。虽然它也是一个动态框架,但它与系统框架不同。应用程序中使用Cocoa Touch Framework创建的动态库在打包提交时会被放置在应用程序主bundle的根目录下,并且会在沙箱中运行,而不是在系统中运行。 。换句话说,即使不同的应用程序使用相同的框架,框架的多个副本仍然会被单独签名、打包和加载。不过,iOS8开放了App Extension功能,可以让你为应用程序创建插件。这样主app和插件之间共享动态库还是可行的。
      Apple系统特定的框架是共享的(例如UIKit),但是我们使用Cocoa Touch Framework制作的动态库被放置在应用程序包中并在沙箱中运行

静态库和动态库的存在形式

  • 静态库:文件扩展名是.a和.framework。

  • 动态库:以.tbd(之前叫.dylib) 和 .framework 为文件后缀名。(系统直接提供给我们的framework都是动态库!)

    理解.a 是一个纯二进制文件.framework 中除了有二进制文件之外还有资源文件。 .a ,要有 .h 文件以及资源文件配合, .framework 文件可以直接使用。总的来说,.a + .h + sourceFile = .framework。所以创建静态库最好还是用.framework的形式

静态库和动态库的区别

区别

转自:https://www.cnblogs.com/junhuawang/p/7598236.html

. . .

相关推荐

额外说明

JVM详解(InsCode AI创作助手)

JVM是一个虚拟的计算机,它有自己的硬件架构,如处理器、堆栈和寄存器等,也有自己的指令系统。JVM的主要任务是负责加载、验证、编译和执行Java程序。 一、JVM参数默认配置如下 内存设置: 初始堆内存大小:物理内存的1/64 最大堆内存大小:物理内存的

额外说明

Python http接口测试

Python http网络接口测试 安装requests库 测试栗子 requests对应的几种请求方式 get请求的参数 post请求参数 请求消息后获取的响应消息 使用requests库即可实现 安装requests库 命令行中输入以下命令安装: p

额外说明

基于webrtc的前端录屏和直播

我在腾讯主导了一个用于用户行为监控与回放的项目,其中,通过录制前端DOM的变化,实现用户界面的变化。和rrweb不同,我们没有使用MutationObserver方案进行录制,这个方案需要解决如何获取被移除节点的路径问题,非常复杂,且MutationOb

额外说明

STM32L071 IAP 升级期间出现“无法访问目标。关闭调试会话”问题

STLink_V2调试STM32L071 IAP功能时,执行到FLASH_If_Erase()出现以下 // 在以下代码中 增加1ms延时,解决问题。原因待解。 HAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_Eras

额外说明

谷歌F12控制台接口测试以及造测试数据

作为测试,经常需要建造很多的测试数据,此文描述在浏览器控制台上,遍历访问后端接口,达到批量制造数据。 打开浏览器开发工具,在network查看需要批量操作的请求,如场景的add接口。 选择请求,右键鼠标copy→copy as fetch,回到控制台粘贴

额外说明

C++ static关键字

#include <iostream> using namespace std; class B { public: int getC() { return c; } void setC(int _c) {

额外说明

Angular开发(十五)-关于父子组件中投影的介绍

我们利用父组件做做一个通用的模板,然后各个子组件嵌套进去,实现自己的功能,比如:我们要做一个提示弹框,确认弹框…就可以利用这个原理,在angular中有个投影的ng-content可以用在子组件中,父组件直接传递模板到子组件中 常用的投影选择有 sele

额外说明

前端(十九)——vue/react脚手架的搭建方式

-博主:小猫娃来啦 -文章核心:前端(十九)——vue/react脚手架的搭建方式 文章目录 前言 Vue脚手架搭建方法 Vue CLI脚手架 Vite脚手架 其他方式 React脚手架搭建方法 Create React App脚手架 Vite脚手架 其

额外说明

wordpress图像大小_如何在WordPress中进行基本图像编辑(裁剪,旋转,缩放,翻转)

wordpress图像大小 您知道您可以在 WordPress 管理区域中进行基本的图像编辑吗?这包括图像裁剪、旋转、缩放图像尺寸以及垂直或水平翻转它们。 您知道您可以在 WordPress 管理区域中进行基本的图像编辑吗?这包括图像裁剪、旋转、缩放图像

额外说明

C语言生成随机uuid编码示例-(UUID 4变体1版本)

UUID的介绍参考文章: UUID简介及java代码获取UUID example_java获取uuid_西进的No1博客 - CSDN博客 本文示例为UUID版本4变体1的C语言实现程序,说明请参见代码和注释。 #include <stdio.h> #i

ads via 小工具