美文网首页开发文档网络请求
iOS-Aspect简单使用(AOP)

iOS-Aspect简单使用(AOP)

作者: 大老虎_Robin | 来源:发表于2017-05-02 17:44 被阅读897次

使用cocoapods将Aspects添加到project中。

target 'Project' do
    use_frameworks!
    pod 'Aspects', '~> 1.4.1'
end

1.主要使用Aspects 中以下两个方法对project中进行监控

#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);
}

/// @return A token which allows to later deregister the aspect.
- (id<AspectToken>)aspect_hookSelector:(SEL)selector
                           withOptions:(AspectOptions)options
                            usingBlock:(id)block
                                 error:(NSError **)error {
    return aspect_add(self, selector, options, block, error);
}

2.导入头文件

#import <Aspects/Aspects.h>

3.简单的使用示例

+(void)Aspect {
    //如果对project中所有ViewController进行监控。
    //可以对UIViewController中的方法进行勾取。
    //例如:viewWillAppear:、viewDidLoad()等方法。
    [UIViewController aspect_hookSelector:@selector(viewWillAppear:) 
                             withOptions:AspecPositionAfter 
                              usingBlock:^(id<AspectInfo> info) {
                                  NSStirng *className = NSStringFromClass([[info instance] class]);
                                  NSLog(@"%@",className);
                              } error:NULL];

    //对ViewController中方法的监控
    //例如:对ViewController中dismissHUD:(CGFloat)delayFloat;方法进行监控。
    [ViewController aspect_hookSelector:@selector(dismissHUD:) 
                            withOptions:AspectPositionAfter 
                             usingBlock:^(id<AspectInfo> info, CGFloat delayFloat) {
                                 //调用的实例对象
                                 id instance = info.instance;

                                 //原始的方法
                                 id invocation = info.originalInvocation;

                                 //参数
                                 id arguments = info.arguments;

                                 //原始的方法,再次调用
                                 [invocation invoke];

                                 //监控方法的参数值
                                 NSLog(@"方法参数值:%f",delayFloat);
                             }error:NULL];
}

相关文章

  • iOS-Aspect简单使用(AOP)

    使用cocoapods将Aspects添加到project中。 1.主要使用Aspects 中以下两个方法对pro...

  • aop

    使用: spring aop使用简单示例 开启单个bean的代理,ProxyFactoryBean aop失效 a...

  • 十七、spring事务之简单使用和原理

    注:要了解spring事务最好先去了解spring aop,可以参考十一、spring aop之简单使用 简单使用...

  • .net Aop 示例

    这篇博客覆盖的内容包括: AOP简史 AOP解决什么问题 使用PostSharp编写一个简单的切面 AOP是什么?...

  • (FS计划)理清楚Spring的AOP到底怎么玩

    前面简单介绍了Spring中AOP的使用,是基于XML配置。这次详细介绍一下Spring中AOP的使用和实现。 0...

  • iOS AOP简单实现日志打点[Aspects]

    前言:本文简述简单使用Aspects实现自动日志打点,仅是简单使用,深层次需要大神来深究 一、知名AOP库 Asp...

  • spring aop 汇总

    静态代理、动态代理和cglib代理 aop 使用 Spring AOP - 注解方式使用介绍spring aop ...

  • spring源码解析-AOP

    前几篇介绍了spring IOC的实现原理,从这篇开始介绍AOP的相关源码 一个简单的AOP使用例子 spring...

  • spring-aop

    aop概念aop概念aop术语AOP实现方式1、spring-aop(使用xml文件实现AOP)2、AspectJ...

  • Guice AOP(Matcher)

    本教程主要详细讲解Guice的一些AOP方式,通过该简单教程让我们可以快速使用Guice进行AOP开发,后续我们会...

网友评论

    本文标题:iOS-Aspect简单使用(AOP)

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