美文网首页
面向切面编程之 Aspects 源码解析及应用

面向切面编程之 Aspects 源码解析及应用

作者: bo_song | 来源:发表于2016-10-17 15:28 被阅读0次

作者: zach (http://wereadteam.github.io/2016/06/30/Aspects/#comments)
https://github.com/Jowyer/iOSViewArchDemo/tree/master/Interceptor

1. 背景

最近在做项目的打点统计的时候,发现业务逻辑和打点逻辑经常耦合在一起,这样一方面影响了正常的业务逻辑,同时也很容易搞乱打点逻辑,而且要查看打点情况的时候也很分散,因此想着如何将两者解耦,并将打点逻辑集中起来。其实在 web 编程时候,这种场景很早就有了很成熟的方案,也就是所谓的 aop 编程(面向切面编程),其原理也就是在不更改正常的业务处理流程的前提下,通过生成一个动态代理类,从而实现对目标对象嵌入附加的操作。
在 iOS 中,要想实现相似的效果也很简单,利用 OC 的动态性,通过 swizzling method 改变目标函数的 selector 所指向的实现,然后在新的实现中实现附加的操作,完成之后再回到原来的处理逻辑。想明白这些之后,我就打算动手实现,当然并没有重复造轮子,我在 github 发现了一个基于 swizzling method 的开源框架 Aspects 。这个库的代码量比较小,总共就一个类文件,使用起来也比较方便,比如你想统计某个 controller 的 viewwillappear 的调用次数,你只需要引入 Aspect.h 头文件,然后在合适的地方初始化如下代码即可。

-(void)addKvLogAspect 
{ 

   [self wr_Aspect_hookSelector:@selector(viewWillAppear:) 

withOptions:AspectPositionAfter usingBlock:^{ 

   KVLog_ReviewTimeline(ReviewTimeline_Open_Tab); 

   }error:NULL];

}

(http://wereadteam.github.io/2016/06/30/Aspects/#comments) 这篇文章主要是介绍 Aspects 源码以及其思路,以及我在实际应用中遇到的一些问题。对 swizzling method 不了解的同学可以先去网上了解一下,下面的内容是基于大家对 swizzling method 有一定的了解的基础上的。

相关文章

网友评论

      本文标题:面向切面编程之 Aspects 源码解析及应用

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