Aspects icon indicating copy to clipboard operation
Aspects copied to clipboard

how to hooking a class method?

Open sayHelloox opened this issue 6 years ago • 4 comments

I find some answer like https://github.com/steipete/Aspects/issues/20 https://github.com/steipete/Aspects/issues/27, but I found those can not work, do someone have other solution, thanks!

sayHelloox avatar Jan 14 '19 03:01 sayHelloox

id object = object_getClass(obj); [object aspect_...]

Assuner-Lee avatar Jan 18 '19 01:01 Assuner-Lee

can not work for me , What am wrong with me?

id object = object_getClass([TestObject new]);

[object aspect_hookSelector:@selector(testClassMethod) withOptions:AspectPositionAfter usingBlock:^(id<AspectInfo> info){
    NSLog(@"Class method ------ hook");

} error:NULL];

//then call method [TestObject testClassMethod];

// No log "Class method ------ hook" print

sayHelloox avatar Jan 18 '19 03:01 sayHelloox

id class = object_getClass(obj); id metaClass = object_getClass(class); [metaClass aspect_...]

Assuner-Lee avatar Jan 18 '19 04:01 Assuner-Lee

  1. import <objc/runtime.h>

  2. fetch MetaClass Object

Class settingsMetal = objc_getMetaClass(NSStringFromClass(Settings.class).UTF8String);

  1. hook with the MetaClass Object

    NSError *error = nil; [settingsMetal aspect_hookSelector:@selector(hello:) withOptions:AspectPositionBefore usingBlock:^(id<AspectInfo> info, NSString *hello){

    } error:&error]; NSLog(@"error %@", error);

Hope this help you !

shinyYangYang avatar Aug 17 '20 10:08 shinyYangYang