(2)iOS - 动态库与静态库

静态库.a(LibAFNetworking.a静态库是.o文件的集合 每一个.o都有自己的Mach header、Segment、Section很融于)
framework也是静态库(动态库AFNetworking.dylib (所有的.o文件都把前三段合并到了一起)只有一个Mach header、Segment、Section 集合包里有一个Blob文件)
(疑问动态库和静态库哪个体积小)

1、理解静态库与动态库的本质
2、理解tdb、framework格式与动态库的关系
3、理解标志-noall_load、-all_load、-ObjC、-force_load的作用
4、理解静态库与动态库分发体积与链接体积的大小
5、理解静态链接过程

Part One
1、什么事tdb格式(系统库格式)
tdb全称是text-based stub libraries,本质上就是一个YAML描述的文本文件
他的作用是用于记录动态库的一些信息,包括导出的符号、动态库的架构信息、动态库的依赖信息
用于避免在针剂开发过程中直接使用传统的dylib
对于真机来说,由于动态库都是在设备上,在Xcode上使用基于tdb格式的伪framework可以大大减少Xcode的大小。

2、Framework(动态库是可以上架的)
Mac OS/iOS平台还可以使用Framework,Framework实际上是一种打包方式,姜库的二进制文件、头文件和有关的资源文件打包到一起,方便管理和分发。
Framework和系统的UIKit.Framework还是有很大区别,系统的Framework不需要拷贝到目标程序中,我们自己的Framework哪怕是动态的,最后也还是要拷贝到App中(App和Extension的Budle是共享的),因此苹果又把这种Framework称为Embedded Framework

3、Embedded Framework(Embedded [ɪmˈbedɪd] 嵌入的)
开发中使用的动态库会被放入到ipa下的framework目录下,基于沙盒运行。
不同的App使用相同的动态库,并不会只在系统中纯在一份。而是会在多个App中各自打包、签名、加载一份。
(这种动态库和系统的加载方式相同,但是仅能在自己的app中使用)

4、Mach-o File Format
一个Mach-o文件由两部分组成:header和data

Mach header.png

打印Mach header
otool -h

打印text segment,text section
otool -t

你可能感兴趣的:((2)iOS - 动态库与静态库)