#import
#import
static IMP __original_Method_Imp;
void _replacement_Method(id self, SEL _cmd)
{
// it will pass
assert([NSStringFromSelector(_cmd) isEqualToString:@"foo"]);
NSLog(@"swizzed foo method");
((void(*)(id,SEL))__original_Method_Imp)(self, _cmd);
}
@implementation GoodSwz
+ (void)swizzle
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
OSSpinLock lock = OS_SPINLOCK_INIT;
OSSpinLockLock(&lock);
Method m = class_getInstanceMethod( [self class], @selector(foo));
__original_Method_Imp =
method_setImplementation( m, (IMP)_replacement_Method );
OSSpinLockUnlock(&lock);
});
}
@end