NSObject+Swizzle.m 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. //
  2. // NSObject+Swizzle.m
  3. // sansanMassage_Consumer
  4. //
  5. // Created by YoMi on 2022/8/11.
  6. //
  7. #import "NSObject+Swizzle.h"
  8. @implementation NSObject (Swizzle)
  9. + (void)swizzleOriginalSelector:(SEL)original swizzleSelector:(SEL)swizzle isInstanceSelector:(BOOL)isInstance {
  10. // get Method
  11. Method originalMethod = nil;
  12. Method swizzlingMethod = nil;
  13. Class class = isInstance ? [self class] : object_getClass(self);
  14. if (isInstance) {
  15. originalMethod = class_getInstanceMethod(class, original);
  16. swizzlingMethod = class_getInstanceMethod(class, swizzle);
  17. }
  18. else{
  19. originalMethod = class_getClassMethod(class, original);
  20. swizzlingMethod = class_getClassMethod(class, swizzle);
  21. }
  22. BOOL didAddMethod = class_addMethod(class, original, method_getImplementation(swizzlingMethod), method_getTypeEncoding(swizzlingMethod));
  23. if (didAddMethod) {
  24. class_replaceMethod(class, swizzle, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod));
  25. }
  26. else {
  27. method_exchangeImplementations(originalMethod, swizzlingMethod);
  28. }
  29. }
  30. @end