面向切面编程之疯狂的 Aspects

什么是面向切面编程

Aspect Oriented Programming(AOP),面向切面编程,是一个比较热门的话题。AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。

主要用来处理一些具有横切性质的系统性服务,如日志记录、权限管理、缓存、对象池管理等,AOP 已经成为一种非常常用的解决方案。

比如说我们在实现权限验证的时候,需要在每个业务的执行前对权限进行相应的判断,从而导致了大量的重复代码,不利于模块的复用。AOP则通过将每个业务的公共行为进行抽离,封装成一个可复用的模块,这个模块就叫做『切面』。

什么是Aspects

Aspects是一个轻量级的面向切面编程的库。它主要提供了三个切入点:before(在原始的方法前执行)/instead(替换原始的方法执行)/after(在原始的方法后执行,默认),通过Runtime消息转发实现Hook,同时这也会带来一定的负担,所以它不适合循环多次调用的方法。

Aspects扩展了NSObject类,对外提供如下两个方法:

Aspects初始化工作核心部分的解析

aspect_add方法:

HookClass过程:

HookSelector过程

Aspects执行工作核心部分的解析

当我们正式向某个接受者发送消息的时候,会进行消息转发,而之前HookClass的过程当中我们已经对forwardInvocation的实现替换为了__ASPECTS_ARE_BEING_CALLED__

执行block的代码

流程图:


流程图

打赏支持我写出更多好文章,谢谢!

打赏作者

打赏支持我写出更多好文章,谢谢!

任选一种支付方式

1 6 收藏 评论

关于作者:千客

iOS攻城狮一枚,暂无多大的成就,喜欢开源,一心为开源做贡献 个人主页 · 我的文章 · 1 ·      

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部