MOAspects 2.1.1

MOAspects 2.1.1

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布日期最新发布2016年4月

Hiromi Motodera 维护。



MOAspects 2.1.1

  • Hiromi Motodera

MOAspects 是一个针对 iOS 的 AOP 库。

版本

1.0.0

针对 Objective-C 语言的稳定版本。

2.1.1

支持 Swift 语言的开发版本。

如何开始

Podfile

稳定版本

pod 'MOAspects', '~> 1.0.0'

开发版本

pod 'MOAspects'

接口

MOAspect.h

#pragma mark - Hook instance method

+ (BOOL)hookInstanceMethodForClass:(Class)clazz
                          selector:(SEL)selector
                   aspectsPosition:(MOAspectsPosition)aspectsPosition
                        usingBlock:(id)block;

+ (BOOL)hookInstanceMethodForClass:(Class)clazz
                          selector:(SEL)selector
                   aspectsPosition:(MOAspectsPosition)aspectsPosition
                         hookRange:(MOAspectsHookRange)hookRange
                        usingBlock:(id)block;

#pragma mark - Hook class method

+ (BOOL)hookClassMethodForClass:(Class)clazz
                       selector:(SEL)selector
                aspectsPosition:(MOAspectsPosition)aspectsPosition
                     usingBlock:(id)block;

+ (BOOL)hookClassMethodForClass:(Class)clazz
                       selector:(SEL)selector
                aspectsPosition:(MOAspectsPosition)aspectsPosition
                      hookRange:(MOAspectsHookRange)hookRange
                     usingBlock:(id)block;

如何使用

Objective-C

Hook 类方法示例

[MOAspects hookClassMethodForClass:[NSNumber class]
                          selector:@selector(numberWithInt:)
                   aspectsPosition:MOAspectsPositionBefore
                        usingBlock:^(id class, int intVar){
                            NSLog(@"hooked %d number!", intVar);
                        }];

[NSNumber numberWithInt:10]; // -> hooked 10 number!

Hook 实例方法示例

[MOAspects hookInstanceMethodForClass:[NSString class]
                             selector:@selector(length)
                      aspectsPosition:MOAspectsPositionBefore
                           usingBlock:^(NSString *string){
                               NSLog(@"hooked %@!", string);
                           }];

[@"abcde" length]; // -> hooked abcde!

Swift

Hook 类方法示例

MOAspects.hookClassMethodForClass(UIScreen.self, selector:"mainScreen", position:.Before) {
    NSLog("hooked screen!")
}

UIScreen.mainScreen() // -> hooked screen!

Hook 实例方法示例

MOAspects.hookInstanceMethodForClass(ViewController.self, selector:"viewDidLoad", position:.After) {
    NSLog("view did loaded!")
}

// -> view did loaded!

规格表

32bit 64bit 可以 Hook
方法类型

层次 Hook
Hook
返回值
自然
Swift 方法
实例 / 类 支持 不支持 不支持