TestsTested | ✓ |
LangLanguage | Obj-CObjective C |
License | MIT |
ReleasedLast Release | Dec 2014 |
Maintained by Jonas Gessner.
An easy to use Objective-C level API for swizzling class and instance methods, as well as swizzling instance methods on specific instances only.
JGMethodSwizzlerTests
Xcode project.JGMethodSwizzler can be used for three basic swizzling types: Swizzling a specific method for all instances of a class, swizzling class methods and swizzling instance methods of specific instances only.
JGMethodSwizzler is completely thread safe and can handle multiple swizzles. Instance-specific swizzling should however not be combined with global swizzling in the same method.
Swizzling the method +(int)[TestClass test:(int)]
[TestClass swizzleClassMethod:@selector(test:) withReplacement:JGMethodReplacementProviderBlock {
//return a replacement block
return JGMethodReplacement(int, const Class *, int arg) {
//get the original value
int orig = JGOriginalImplementation(int, arg);
//return the modified value
return orig+2;
};
}];
After this code is run, calling the method will return the modified value until the method is deswizzled.
Swizzling the method -(int)[TestClass test:(int)]
[TestClass swizzleInstanceMethod:@selector(test:) withReplacement:JGMethodReplacementProviderBlock {
//return a replacement block
return JGMethodReplacement(int, TestClass *, int arg) {
//get the original value
int orig = JGOriginalImplementation(int, arg);
//return the modified value
return orig+2;
};
}];
After this code is run, calling the method will return the modified value until the method is deswizzled.
Swizzling the description
method on a specific NSObject
instance:
NSObject *object = [NSObject new];
[object swizzleMethod:@selector(description) withReplacement:JGMethodReplacementProviderBlock {
return JGMethodReplacement(NSString *, NSObject *) {
NSString *orig = JGOriginalImplementation(NSString *);
return [orig stringByAppendingString:@" Swizzled!!"];
};
}];
After this code is run, calling the method will return the modified value until the method is deswizzled.
All swizzles can be removed once they've been applied.
deswizzleAll()
removes all swizzles.
deswizzleGlobal()
removes all swizzles that have been applied as global swizzles (not instance specific).
+deswizzleClassMethod:(SEL)
deswizzles a specific class method.
+deswizzleInstanceMethod:(SEL)
deswizzles a specific instance method.
+deswizzleAllClassMethods
deswizzles all swizzled class methods of this class.
+deswizzleAllInstanceMethods
deswizzles all swizzled instance methods of this class.
+deswizzleAllMethods
deswizzles all swizzled methods of this class.
deswizzleInstances()
removes all swizzles that have been applied as instance specific swizzles.
-deswizzleMethod:(SEL)
deswizzles a specific instance method of this instance.
-deswizzle
deswizzles all swizzled instance methods of this instance.
JGMethodSwizzler
works with both ARC and MRC/MRR.
Created by Jonas Gessner.
Thanks to Andrew Richardson for his inspiration and contribution with InstanceHook
.
Licensed under the MIT license.