当前位置: 首页 > news >正文

iOS之库

为什么80%的码农都做不了架构师?>>>   hot3.png

一、什么是库

库是程序代码的集合,是共享程序代码的一种方式。

 

二、库的分类

根据源代码的公开情况,库可以分为2种类型。

1.开源库

公开源代码,能看到具体实现。

比如,SDWebImage、AFNetworking

 

2.闭源库

不公开源代码,是经过编译后的二进制文件,看不见具体实现。

 

三、静态库和动态库

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

静态库:.a和.framework

动态库:.dylib和.framework

 

2.使用区别

静态库:链接时,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝。如下图:

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

3.查看静态库支持的架构(命令)

lipo -info XXX.a

 

4.架构列表

i386:iPhone模拟器  3GS—>iPhone5

x86_64:iPhone模拟器 5s 6plus

armv7:iPhone 3GS 4s

armv7s:iPhone 5 5c

arm64:iPhone 5s 6plus

 

5.合并静态库(同时支持不同的架构)

/*将XXX1.a和XXX2.a合并生成XXX3.a (生成的XXX3.a在当前路径下)*/

lipo –create XXX1.a XXX2.a –output XXX3.a

 

6. 静态库文件的版本(4种)

1)真机-Debug版本

2)真机-Release版本

3)模拟器-Debug版本

4)模拟器-Release版本

 

四、调试版本(Debug版本) VS 发布版本(Release版本)

- 调试版本会包含完整的符号信息,以方便调试

- 调试版本不会对代码进行优化

 

- 发布版本不会包含完整的符号信息

- 发布版本的执行代码是进行过优化的

- 发布版本的大小会比调试版本的略小

- 在执行速度方面,调试版本会更快些,但不意味着会有显著的提升

 

五、静态库编译

选择编译的静态库带头文件。

操作:(.a)

target build phases Copy files +

操作:(.framework)

target build phases headers  public/private/project

 

六、framework

因为framework文件既可能是静态库,也可能是动态库。

使用时,动态库应该添加库。(target—>general embedded binarles)(自己制作framework时,默认制作成动态库)

 

framework制作成静态库:

target build settings linking match-o type static library

转载于:https://my.oschina.net/chars/blog/532631

相关文章:

  • Android Fragment生命周期图以及Activity与Fragment生命周期对照图
  • 基于.NET 的WebSocket 的简单实例 --- 数据格式
  • c#进程间通信(Inter-Process Communication)
  • vim简单的文本编辑命令
  • 【BZOJ】2879: [Noi2012]美食节
  • gulp 教程
  • 虚拟化之vmx配置文件
  • 致北京
  • 二进制方式快速安装MySQL数据库
  • 沙盒 文件操作
  • PHP上传(单个)文件示例
  • UESTC 1246 拆x3
  • 积分显示算法(4.34.5 4.14 4.65)
  • linux中ssh免密码登录
  • postgresql cluster和correlation
  • 03Go 类型总结
  • C学习-枚举(九)
  • django开发-定时任务的使用
  • Docker入门(二) - Dockerfile
  • Git学习与使用心得(1)—— 初始化
  • Python 基础起步 (十) 什么叫函数?
  • vagrant 添加本地 box 安装 laravel homestead
  • Wamp集成环境 添加PHP的新版本
  • Web Storage相关
  • 服务器从安装到部署全过程(二)
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 物联网链路协议
  • 携程小程序初体验
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • # .NET Framework中使用命名管道进行进程间通信
  • #pragma multi_compile #pragma shader_feature
  • %@ page import=%的用法
  • (5)STL算法之复制
  • (6)STL算法之转换
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (SpringBoot)第七章:SpringBoot日志文件
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (转)VC++中ondraw在什么时候调用的
  • (转)大道至简,职场上做人做事做管理
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .Net core 6.0 升8.0
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .Net环境下的缓存技术介绍
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • @在php中起什么作用?
  • [.NET]桃源网络硬盘 v7.4
  • [1127]图形打印 sdutOJ
  • [Android]Android开发入门之HelloWorld