ios 向类中动态添加方法

本文探讨了Objective-C与Swift两种编程语言在iOS开发领域的应用与区别,介绍了它们各自的优势及适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@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);
    //.....
}

转载于:https://www.cnblogs.com/eeeyes/archive/2012/04/10/2441272.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值