什么是切片
程序要完成一件事情,一定会有一些步骤,1,2,3,4这样。这里分解出来的每一个步骤我们可以认为是一个切片。
什么是AOP
你针对每一个切片的间隙,塞一些代码进去,在程序正常进行1,2,3,4步的间隙可以跑到你塞进去的代码,那么你写这些代码就是面向切片编程
解决什么问题
如果想在每个步骤中间做一些自己的事情,不用AOP的话,需要直接往步骤之间塞代码就好了。但通常塞进去的代码很有可能跟原业务无关,比如统计。这就会导致同一份代码文件里掺杂了多种业务,造成业务之间的耦合。为了降低这种耦合,需要使用AOP
如何实现AOP
AOP一般都是需要有一个拦截器,然后在每一个切片运行之前和运行之后(或者任何你希望的地方),通过调用拦截器的方法来把这个jointpoint扔到外面,在外面获得这个jointpoint的时候,执行相应的代码。
iOS中实现AOP总体来说有两种方法:
- method swizzling. 这种方法的最小粒度是方法。这种方法有了成熟的开源库Aspects.
- delegate. 定义一个protocol, 然后在合适的时机把jointpoint扔给代理,让代理做一些事情。