@interface TestObject : NSObject-(void)printFirstName:(NSString*)firstName thenSecondName:(NSString*)secondName;-(void)printName:(NSString*)name;-(int)addLeft:(int)left withRight:(int)right;@end
@implementation TestObject-(SEL)oriSelector:(SEL)aSelector{ NSString* v2String=NSStringFromSelector(aSelector); NSString* oriString=[v2String stringByReplacingCharactersInRange:NSMakeRange(0, 2) withString:@""]; return NSSelectorFromString(oriString);}-(void)changeInvocation:(NSInvocation*)invocation{ SEL aSelector=[invocation selector]; [invocation setSelector:[self oriSelector:aSelector]];}-(void)v2Method:(NSInvocation*)invocation{ NSLog(@"hello"); [self changeInvocation:invocation]; [invocation invokeWithTarget:self]; NSLog(@"goodbye");}-(void)v3Method:(NSInvocation*)invocation{ NSLog(@"fuck"); [self changeInvocation:invocation]; [invocation invokeWithTarget:self];}-(NSMethodSignature*)methodSignatureForSelector:(SEL)aSelector{ NSString* vString=NSStringFromSelector(aSelector); NSString* oriString=[vString stringByReplacingCharactersInRange:NSMakeRange(0, 2) withString:@""]; NSMethodSignature* signature=[super methodSignatureForSelector:NSSelectorFromString(oriString)]; return signature;}-(void)forwardInvocation:(NSInvocation *)anInvocation{ SEL aSelector=[anInvocation selector]; NSString* aSelectorString=NSStringFromSelector(aSelector); if([aSelectorString hasPrefix:@"v2"]) [self v2Method:anInvocation]; else if([aSelectorString hasPrefix:@"v3"]) [self v3Method:anInvocation];}-(void)printFirstName:(NSString *)firstName thenSecondName:(NSString *)secondName{ NSLog(@"%@ %@",firstName,secondName);}-(void)printName:(NSString*)name{ NSLog(@"%@",name);}-(int)addLeft:(int)left withRight:(int)right{ int value=left+right; NSLog(@"%d add %d is %d",left,right,value); return value;}@end
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ TestObject* t=[[TestObject alloc]init]; [t printFirstName:@"your" thenSecondName:@"sister"]; [t v2printFirstName:@"your" thenSecondName:@"sister"]; [t v3printName:@"your sister"]; int a=(int)[t v2addLeft:2 withRight:2]; NSLog(@"%d",a); //.....}