load 耗时工具类原理解析

如果要对load函数进行hook,需要做到下面两点:
1,在系统调用load方法之前对load进行hook
2,对load进行hook

研究:
1,经过runtime源码分析,在程序启动的时候先调用mapImages(加载所有mach-0文件),for循环调用所有mach-o文件的loadImage函数(该函数第一次调用会加载所有mach-o分类信息,并调用改mach-o文件的load函数),
2,根据Cocopods的源码,动态库的优先级比静态库高,库名字的ascall码小的先加载,
实现方案:
编写一个动态库字库,库的名字首字母要保证是所有动态库最小的,
在该库中通过attribute(constructor)函数(该函数会在该库的load函数后调用),在这个时候已经加载了所有的分类信息,并且还没有调用业务中的其他load函数,这个时候可以拿到所有unlazy类,然后进行hook拦截

load方法过多到时启动慢的原因是类的release这个操作很耗时
参考:
https://triplecc.github.io/2019/05/27/%E8%AE%A1%E7%AE%97load%E8%80%97%E6%97%B6/

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 本文会介绍一个自己写的工具,能够把第三方iOS应用转成动态库,并加载到自己的App中,文章最后会以支付宝为例...
    hhy_082510阅读 5,043评论 1 1
  • 可否使用 == 来判断两个NSString类型的字符串是否相同?为什么? 不能。==判断的是两个变量的值的内存地址...
    渐z阅读 3,762评论 0 0
  • 前言 在 iOS 开发中,使用的编程语言主要是 Objective-C。这一种编程语言虽然是 C/C++ 的扩展,...
    Anyeler阅读 6,338评论 0 11
  • 前言 启动优化一役后,超预期将所负责的 App 双端启动的耗时都降低了65%以上,iOS 在iPhone7上速度达...
    编程怪才_凌雨画阅读 3,188评论 0 2
  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 11,292评论 0 4