NSObject+Swizzling.m 1.1 KB

1234567891011121314151617181920212223242526272829303132
  1. //
  2. // NSObject+Swizzling.m
  3. // MSYOUPAI
  4. //
  5. // Created by YoMi on 2023/11/7.
  6. //
  7. #import "NSObject+Swizzling.h"
  8. #import <objc/runtime.h>
  9. @implementation NSObject (Swizzling)
  10. + (void)exchangeInstanceMethodWithSelfClass:(Class)selfClass
  11. originalSelector:(SEL)originalSelector
  12. swizzledSelector:(SEL)swizzledSelector {
  13. Method originalMethod = class_getInstanceMethod(selfClass, originalSelector);
  14. Method swizzledMethod = class_getInstanceMethod(selfClass, swizzledSelector);
  15. BOOL didAddMethod = class_addMethod(selfClass,
  16. originalSelector,
  17. method_getImplementation(swizzledMethod),
  18. method_getTypeEncoding(swizzledMethod));
  19. if (didAddMethod) {
  20. class_replaceMethod(selfClass,
  21. swizzledSelector,
  22. method_getImplementation(originalMethod),
  23. method_getTypeEncoding(originalMethod));
  24. } else {
  25. method_exchangeImplementations(originalMethod, swizzledMethod);
  26. }
  27. }
  28. @end