iOS-Aspect简单使用(AOP)

大老虎_RobinIP属地: 辽宁
0.253字数 45

使用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];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
6人点赞
总资产1共写了1.1W字获得21个赞共17个粉丝

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,923评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,951评论 6 342
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,229评论 4 61
  • php artisan make:migration creat_students_table --create=...
    孟维学阅读 174评论 0 0
  • 天灰蒙蒙的,还下着淅淅沥沥的小雨。 天气的阴沉,加重了他心里的痛苦。他步伐沉重,一步一步往前挪。 心里兵荒马乱。 ...
    东方地秀阅读 243评论 0 1