静态库

作者: 闲得一B | 来源:发表于2016-03-18 16:38 被阅读96次

一、什么是库?

:就是程序代码的集合,是共享程序代码的一种方式


库的分类开源库闭源库


  • 开源库:源代码公开,能看到具体代码实现 比如:AFNetworking、SDWebImage
  • 闭源库:源代码不公开,看不到具体实现,看到的是编译后的二进制文件

二、闭源库

闭源库: 静态库动态库


静态库

  • 以 .a文件 .framework文件形式存在
  • 应用场景:保护核心代码,但同时希望更多程序员使用 如:友盟、百度地图
  • 注意:将MRC的项目,打包成静态库,可以直接在ARC下使用,不需要转换

动态库

  • 以 .dylib 和.framework文件形式存在

静态库动态库的区别:

  • 静态库在链接时,会被完整的复制到可执行文件中,被多次使用,就有多份拷贝;
  • 动态库则不会复制,只有一份,程序运行时动态加载到内存,系统只加载一次,多个程序共用,节省内存;
  • 但是项目中如果使用到自己的动态库,苹果不允许上架!
  • WWDC2014苹果iOS8开放动态dylib的接口,也就是开放了动态库挂载!

三、创建静态库

1、创建项目时,直接创建静态库.a或者.framework

创建 .a或者 .frameWork静态库

2、选择.a静态库:
添加需要暴露的头文件,此时还没有真正生成静态库


制作.a静态库步骤.png

3、选择模拟器或者真机编译生成静态库
command+B 编译生成 .a静态库 (libabc.a变色)


真机、模拟器.png

4、查看 .a静态库 、.framework静态库


查看.a静态库、.framework静态库.png

5、模拟器下的静态库和真机下的静态库不能共用:

模拟器和真机CUP架构不一样,并且各个模拟器型号之间架构也不一样


  • 静态库文件架构:
    模拟器:
    iPhone 4s~5: i386
    iPhone 5S~6sPlus: x86_64
    真机:
    iPhone 3gs~4s:armv7
    iPhone 5~5c: armv7s(armv7兼容armv7s)
    iPhone5s~6sPlus: arm64
    如何查看静态库支持的架构:
    命令行窗口中(终端):lipo -info 库文件
    如何一次编译多个架构的.a静态库(能在多种架构下运行):表示让所有的框架都编译
    编译多个架构的.a静态库.png

  • 静态库文件的版本:
    调试版本: 真机Debug版本 和 模拟器Debug版本
    特点:
    1、调试版本会包含完整的符合信息
    2、方便调试
    3、不会对代码进行优化
    发布版本:真机Release版本 和 模拟器Release版本
    特点:
    1、发布版本不会包含完整的符合信息
    2、会对代码进行优化
    3、版本大小会比调试版本略小
    4、发布版本比调试版本执行速度’稍微‘有提升

如何生存不同版本:
项目->Edit Scheme-> Run -> Release/Debug 分别进行编译


静态库编译版本.png
静态库编译版本+.png

6、如何生成一个静态库能在模拟器上和真机上都能运行?(因为支持框架不同,所以没法同时运行)

  • 首先需要生成真机版本模拟器版本
  • 将静态库合并(合并.a)
    合并步骤:
    终端命令: lipo -create 第一个.a库文件路径 第二个.a库文件路径 -output 合并.a库文件名
    合并优点:开发过程中可以在真机和模拟器上调试
    合并缺点:合并后库文件太大

7、制作.framework库文件

设置编译多个架构
![编译多个类型].png](https://img.haomeiwen.com/i1170347/f644dab6cc42c83f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
但是默认是动态库,需要设置连接类型 target -> BuildSetting->搜索Mach-o Type:改为静态库

framework静态库连接类型.png

8、.a静态库和.framework静态库的区别?

  • .a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件
  • .a文件不能直接使用,至少要有.h文件配合;.framework文件可以直接使用
  • 相当于.a+.h+sourceFile = .framework
  • 建议使用.framework

四、使用

注意:首先查看使用的库文件支持的库文件架构

  • 导入库文件
  • 如果.a静态库文件记得拖入对应的.h文件

相关文章

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

  • iOS静态库之间互调冲突问题

    研究目的 1. 在其他静态库(B静态库)中导入公共静态库(A静态库),想直接使用公共静态库(A静态库)中的方法和m...

  • iOS小知识 -- 静态库(一)

    静态库静态库的介绍.a静态库的制作以及测试静态库的架构问题.framework静态库的制作以及测试边开发边制作静态...

  • 静态库

    静态库 静态库动态库简介 .a 静态库:被编译好的二进制文件 静态库:.a, .framework 动态库: .d...

  • Ndk生成so和a库,然后主项目进行调用

    在 NDK 开发中引入第三方静态库和动态库 静态库和动态库 静态库 静态库文件后缀一般为 .a ,利用静态库编译成...

  • iOS 静态库和动态库的制作

    静态库和动态库 一、静态库和动态库的存在形式 静态库: .a 和 .framework 动态库: .dylib 和...

  • ios中静态库.a的制作

    在ios中制作静态库之前,先来了解关于静态库的一些概念。 八、静态库和动态库在使用上的区别。静态库:链接时,静态库...

  • ios中静态库.a的制作和使用

    在ios中制作静态库之前,先来了解关于静态库的一些概念。 八、静态库和动态库在使用上的区别。静态库:链接时,静态库...

  • iOS 静态库

    iOS 静态库 iOS 静态库

  • 静态库和动态库

    静态库和动态库的存在形式静态库:.a 和 .framework动态库:.dylib 和 .framework 静态...

网友评论

      本文标题:静态库

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