美文网首页
复习总结2 切面编程 & 二进制优化

复习总结2 切面编程 & 二进制优化

作者: Foxhoundsun | 来源:发表于2020-05-20 02:37 被阅读0次

Aspect切面编程

定义

切面编程
以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。

Aspects简介:

Aspects github地址:https://github.com/steipete/Aspects.git

Aspect是一个基于metho swizzing的iOS函数替换的第三方库,他可以很好的实现勾取一个类或者一个对象的某个方法

#pragma mark - Public Aspects API
+ (id<AspectToken>)aspect_hookSelector:(SEL)selector
                      withOptions:(AspectOptions)options
                       usingBlock:(id)block
                            error:(NSError **)error {
    return aspect_add((id)self, selector, options, block, error);
}  //钩一个类所有实例方法中的某一个方法

- (id<AspectToken>)aspect_hookSelector:(SEL)selector
                      withOptions:(AspectOptions)options
                       usingBlock:(id)block
                            error:(NSError **)error {
    return aspect_add(self, selector, options, block, error);
} //钩取一个实例对象的某一个方法

实现原理

基于消息转发

Aspects主要是利用了forwardInvocation进行转发,Aspects利用和kvo类似的原理,通过动态创建子类的方式,把对应的对象isa指针指向创建的子类,然后把子类的forwardInvocationIMP替成__ASPECTS_ARE_BEING_CALLED__

注意

处理调用逻辑, 有before, instead, after, remove四种option插入状态。
将block转换成一个NSInvocation对象以供调用。

二进制优化

原理

image.png

利用iOS系统物理内存与虚拟内存映射的机制,把所有启动时候的代码都放在一页或者两页,这样就很大程度上优化启动速度即二进制重拍。

实现
1.Instruments调试工具 -> System Trace
调试工具,测试启动时间

2.BuildSetting -> Write Link Map File -> yes
打开项目的符号顺序输出开关

3.通过Clang获取APP启动时候调用的所有方法
Other C Flags 在里面添加相关参数,第一个启动页面里加入相应库函数和代码段

4.Build setting -> Order File
加载符号加载顺序文件

相关文章

  • 复习总结2 切面编程 & 二进制优化

    Aspect切面编程 定义 切面编程:以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加...

  • Aop切面编程

    1 什么是切面编程2 KVO就是一个切面编程的例子3 借鉴KVO切面编程,用自己的方法实现4 代码实现 切面编程概...

  • Spring初入配置~七

    这次总结的是我们面向切面的Spring. 首先我们先看下关于面向切面编程 的概念。什么是面向切面编程呢? 我们通常...

  • AOP

    AOP切面编程 AOP: Aspect Oriented Programming 面向切面编程 面向切面编程(也叫...

  • 来自于宏的黑魔法 --- 简单实现面向切面编程

    Elixir Macro AOP 面向切面 宏 元编程 什么是 AOP (面向切面编程)? 面向切面编程 AOP(...

  • iOS - 切面编程 (Aspects解析)

    前言 首先我们了解几个概念,什么是切面编程?切面编程的实际应用? 切面编程(AOP):什么是切面?举个栗子:切一根...

  • Spring - AOP实现

    什么是AOP编程 AOP: Aspect Oriented Programming 面向切面编程。 面向切面编程(...

  • Spring AOP学习(01)面向切面的编程

    内容概览 什么是面向切面的编程 通过切点来选择连接点 使用注解创建切面 在xml中声明切面 总结 1. 什么是面向...

  • 专业技能

    专业技能(案例一)熟练掌握JAVA面向对象编程,J2EE面向切面切面编程,具有良好的编码风格和编程习惯。熟练掌握J...

  • iOS AOP编程之路

    1. AOP简介 AOP: Aspect Oriented Programming 面向切面编程。 面向切面编程(...

网友评论

      本文标题:复习总结2 切面编程 & 二进制优化

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