iOS hook方法交换

2024-03-25  本文已影响0人  假如兔子失了尾
- (void)replaceMethod:(Class)aClass originalSelector:(SEL)originalSelector swizzledSelector:(SEL)swizzledSelector {
    Method originalMethod = class_getInstanceMethod(aClass, originalSelector);
    Method swizzledMethod = class_getInstanceMethod(aClass, swizzledSelector);
    BOOL didAddMethod = class_addMethod(aClass,
                                        originalSelector,
                                        method_getImplementation(swizzledMethod),
                                        method_getTypeEncoding(swizzledMethod));
    
    if (didAddMethod) {
        NSLog(@"已经添加了 添加方法 class_replaceMethod %@",NSStringFromSelector(swizzledSelector));
        class_replaceMethod(aClass,
                            swizzledSelector,
                            method_getImplementation(originalMethod),
                            method_getTypeEncoding(originalMethod));

    } else {
        NSLog(@"没有添加成功,交换方法 method_exchangeImplementations %@",NSStringFromSelector(swizzledSelector));
        method_exchangeImplementations(originalMethod, swizzledMethod);
    }

}
上一篇 下一篇

猜你喜欢

热点阅读