ios NSInvocation基本使用

为什么要NSInvocation,NSInvocation比performSelector 调用方法,根据方法名可以传递三个参数

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
  
    // performSelector 只能 根据方法名调用 2个参数
    // 传递一个参数例子
    [self performSelector:@selector(callWithNumber:andContent:) withObject:@"110"];
    // 传递二个参数例子
    [self performSelector:@selector(callWithNumber:andContent:) withObject:@"110" withObject:@"吃放了"];
    
    //    [self invocation];
    
    
}

-(void)invocation
{
    //1.创建签名:方法名称|参数|返回|谁拥有它,和方法的调用没有关系
    NSMethodSignature *signature = [ViewController instanceMethodSignatureForSelector:@selector(callWithNumber:andContent:withStatus:)];
    
    
    //创建NSInvocation
    /*
     */
    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
    invocation.target = self;
    invocation.selector = @selector(callWithNumber:andContent:withStatus:);
    
    NSString *number = @"15376321";
     NSString *content = @"11222";
     NSString *status = @"睡觉";
    //self and _cmd 0-1已经被占用了,已经被方法占用了
    [invocation setArgument:&number atIndex:2];
    [invocation setArgument:&content atIndex:3];
    [invocation setArgument:&status atIndex:4];
    
    [invocation invoke];
//    return invocation;
    
}


-(NSString *)call
{
    NSLog(@"call--");
    return @"wre";
}

-(void)callWithNumber:(NSString *)number
{
    NSLog(@"call--%@",number);
}

-(void)callWithNumber:(NSString *)number andContent:(NSString *)content
{
    NSLog(@"call--%@--%@",number,content);
}

-(void)callWithNumber:(NSString *)number andContent:(NSString *)content withStatus:(NSString *)status
{
    NSLog(@"call--%@--%@---%@",number,content,status);
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值