iOS开发

应用启动优化的一些小妙招

2021-10-26  本文已影响0人  iOS祈峰

序言

生命不止,学习不停。保持终身学习的习惯,共勉!!!最近一直在跟着一位老师在学习iOS方面的知识,整理了一些笔记,毕竟好记性不如烂笔头,,希望能对你们有所帮助。主要是关于应用启动优化,一些编译命令和二进制重排方面的。

编译命令

1.生成目标文件

目标文件包含了机器指令代码、数据,链接时需要的信息,符号表、调试信息,字符串表。

1.不指定target,默认Mach-0 64-bit object x86_64:

image.png

clang-o是将.c源文件编译成为一个可执行的二进制代码(-o选项其实是制定输出文件文件名,如果不加-c选项,clang默认会编译链接生成可执行文件,文件的名称由-o选项指定)。

clang-c是使用LLVM汇编器将源文件转化为目标代码。这时,只

  1. 指定生成Mach-0 64-bit x86_64目标文件格式:

[图片上传失败...(image-213fff-1635232213848)]

3.如果指定target不带apple系统版本(包括macOS,ipadOS,iOS,真机和模拟器)。例如x86_64,那么生成的目标文件是Linux的ELF 64bit:

[图片上传失败...(image-64847b-1635232213848)]

4.编译.m:

[图片上传失败...(image-b49615-1635232213848)]

5.编译.mm:

[图片上传失败...(image-9341f8-1635232213848)]

2.查看调试信息

dwarfdump取出并验证DWARF格式调试信息:

[图片上传失败...(image-34dd26-1635232213848)]

3.查看文件内容

objdump用来查看文件内部结构,包括ELF和Maach-o:

[图片上传失败...(image-29cfd7-1635232213848)]

4.静态库的压缩和解压缩

ar压缩目标文件,并对其进行编号和索引,形成静态库。同时也可以解压缩静态库,查看有哪些目标文件:

[图片上传失败...(image-feb329-1635232213848)]

[图片上传失败...(image-a6aa2a-1635232213848)]

5.创建静态库

创建库命令:libtool。可以创建静态库和动态库:

[图片上传失败...(image-af1843-1635232213848)]

6.创建动态库

[图片上传失败...(image-882b49-1635232213848)]

7.查看符号表

nm命令:

[图片上传失败...(image-c3586d-1635232213848)]

symbol types:

[图片上传失败...(image-51e28c-1635232213848)]

[图片上传失败...(image-645ded-1635232213848)]

[图片上传失败...(image-bbefc9-1635232213848)]

8.生成dsYM文件

dsymutil操作DWARF格式的debug symbol。可以将可执行文件debug symbol的生成DWARF格式的文件:

[图片上传失败...(image-b6eb84-1635232213848)]

9.移除符号

strip用来移除和修改符号表:

[图片上传失败...(image-2a2ede-1635232213848)]

10.链接动态库与静态库

[图片上传失败...(image-e351a8-1635232213848)]

11.Xcode打印加载的库

Pre-main Time指main函数执行之间的加载时间,包括dylib动态库加载,Mach-0文件加载,Rebase/Binding,OBjective-C Runtime加载等。

Xcode自身提供了一个控制台打印这些时间的方法:在Xcode中Edit Scheme->Run->Auguments添加环境变量DYLD_PRINT_STATISTICS并把其值设为1.

DYLD_PRINT_LIBRARIES:打印出所有被加载的库。

DYLD_PRINT_LIBRARIES_POST_LAUNCH:打印的是通过dlopen调用返回的库,包括动态库的依赖库,主要发生在main函数运行之后。

二进制重排

1.链接order。file

[图片上传失败...(image-bb203-1635232213848)]

2.生成Link Map

[图片上传失败...(image-be5330-1635232213848)]

到这里了,我就把最近学得分享完了,把这些内容写到这里,对这方面的知识感觉掌握的更加牢固和顺畅了,就像拼图一样,好多碎片化的知识点都在脑海中形成了一个面,如果你也需要一些iOS方面的资料的话,请关注主页!!!

上一篇下一篇

猜你喜欢

热点阅读