这是我参加8月更文应战的第25天,活动概况检查:8月更文应战
我的专栏
- iOS 底层原理探究
- iOS 底层原理探究 之 阶段总结
什么是库?
库是同享程序代码的办法。
库从本质上来说是一种可实施代码的二进制格局,能够被载入到内存苹果官方中实施。库分为静态库和动态库。
iOS中的静态库有.a和.framework两种办法;动态库有.dylib和.framework办法,后来.dylib动态库又被苹果替换成苹果.tb业务性作业d的办法。
静态库:连ios15接时完整地仿制至可实施文件中业务性通知,被多次运用就有多份冗余仿制。
动态库:链接时不仿制,程业务性作业是什么意思序作业时,由体系动业务所态加载ioslauncher到内业务所是干什么的存,供程序调用,业务体系只加载一次,多个程序公google用,节约内存。【iOS暂时只允许运用体系动态库】;
静态库和动态库是业务阻隔级别相对编译期和作业期的:静态库在程序编译时会被连接到政策代码中,程序作业时将不再需求改静态库;而动态库在编译时并不会被连接到政策代码中,只是在程序作业时才被载入,因为在程序作业期间公积金还需求动态库的存在。
总结:同一个静态库在不同程序中运用时,每一个程序中都得导入一次,打包时也被打包进去,构成一个程序。而动态库在不同程序中,打包时并没有被打包进去,只在程序作业时,才链接载入(如体系的结构UIKit、Foundation等),所以程序体积会小许多,但苹果不让运用自己的动态库,否则审阅苹果就无法通过。
framework为什么既是静态库又是动态库?
体系的.framework是xcode下载动态库,咱们自己树立的.framework是静态库。
.a与.framework有什么区别?
.a是一个纯二进制文件, .framework中除了二进制文件之外还有资苹果x源文件。
.a文件不能直接运用,至少要有.h文件苹果官网合作, .framework文件能够直接运用。
.a + .h + sourceFile = .framework
建议运用.framework
为什么要运用静态库?
便ios14.4.1更新了什么利同享代xcode教程码,便于合理运用。
完成iOS程序的模块化。能够吧固定的业务模块化成静xcode下载态库。
和别人共享你的代码库,但是不想让别人看到你代码的完成,开发第三方SDK的需求。
制作静态库时的几点留神:
-
1、留神了解:无论是.a静态库仍是.framework静态库,咱们需求的都是二进制文件+.h+其他资源文件的办法,不同的是,Xcode.a本身就是二进制文件,需求咱们自己配上.h和其他文件才干运用,而.framework本身现已包括了.h和其他文件,能够直接运用。
-
2、图片资源的处理,两种静态库,一般都是把图片文件单独存放在一个.bundle文件中,一般.bundle的姓名和.a或.fram业务所审计薪酬一般是多少ework的姓名相同。.bundle文件很好弄,新建一个文件夹,把它改名为.bundle就苹果能够了,右键,闪现包内容就能够向其间添xcode轿车加图片资源。
-
3、category是咱们实践开发项目中常常ios1471值得更新吗运用到的,把categor苹果1秒赚1万美元y打成静态库是没有问题的,但是在这个静态库的工程中,调用cate苹果11gory中的办法时会有找不到该办法的作业时过错(selector not recognized),解决办法是:在静态库的工程中装备other linker flags的值为-ObjC。
-
4、假设一个静态库很杂乱,需求暴露的.h比xcode轿车较多的话,就能够在静态库的内部创立一个.h文件(一般这个.h文件的姓名和静态库的姓名相同),然后把全部需求显暴露来的.h文件都会合放在这个.h文件中,而那些原本需求暴露的.h都不需求再暴露了,只需求把.h显暴露来就能够了。
创立.a静态苹果x库
- 第一步,新建工程。一般运用工程名就运用库的称谓,比如咱们这儿用jingtaiku来创立静态库,咱们的工程名就取为jingtaiku,创立的.a静态库就是jingtaiku.a。
-
第二步、导入需求打包的资源文件,一起把资源文件需求外界访问的.h文件导入到体系引荐的.h文件中。
-
第三步、真机,苹果13上市时刻模拟器编译一下。就能够生成.a文件(必须先用真机,要否则,不能生成)。
-
第四步、Xcode生成的.a文件默许没有导出.h文件。需求自己增加。
-
第五步、导出你自己的静态库的装备
留神:假设第五步中,不降Build Configuration改为Release,则打包出来的静态库会存于【Dexcode轿车bug-iPhoneos】和【Debug-iphonesimuxcode怎样用lator】两个文件夹下。咱们一般都是运用Release方式,因为程序最终会发布之后是业务Release版的,所以静态库也是在Release方式下运用。
- 第六步、组成模拟器的架构【默许:模拟器只会生成对应的1种架构】
假设第六步这儿,设置为YES,那么编译出来的.a文件库就只包括当时设备的架构。
- 第七步、吞并架构【真机和模拟器】
真机和模拟器吞并:
lipo -create 静态库1.a(途径) 静态库2.a(途径) -output 静态库ioslauncher.a (你最好cd到苹果13工程目录下,这样导出的文件在你工程目录下)
- 第八步、资源包的问题
1、静业务所是干什么的态库的资源,业务性作业是什么意思都应该放到后缀为.狗狗币bundle的文件夹中–>避免文件与本地文件重名被掩盖,导致加载资源文件出错。【注:要加载bundle途径】
2、静态库打包时,并不会打包资源文件 –> 需求手动拖进去