Selector Perform 扩展 多参


http://hi.baidu.com/ncudlz/item/f074c04b353d4fd0c1a592eb

Selector是Objective-C一个非常强大的特性,合理使用Selector可以大大简化实现并避免重复代码。但NSObject提供  的performSelector最多只支持两个参数, 

对于两个以上的参数就没有能力为力了。一番调查后针对NSObject增加了如下扩展,使得 performSelector可以支持传入参数数组。多个参数就不再是问题了。    
@interface NSObject (Addition)  
- (id)performSelector:(SEL)selector withObjects:(NSArray *)objects;  
@end  
@implementation NSObject (Addition)  
- (id)performSelector:(SEL)selector withObjects:(NSArray *)objects {  
      NSMethodSignature *signature = [self methodSignatureForSelector:selector];  
      if (signature) {  
          NSInvocation* invocation = [NSInvocation invocationWithMethodSignature:signature];  
          [invocation setTarget:self];  
          [invocation setSelector:selector];  
          for(int i = 0; i < [objects count]; i++){  
              id object = [objects objectAtIndex:i];  
              [invocation setArgument:&object atIndex: (i + 2)];         
          }  
          [invocation invoke];  
          if (signature.methodReturnLength) {  
              id anObject;  
              [invocation getReturnValue:&anObject];  
              return anObject;  
          } else {  
              return nil;  
          }  
      } else {  
          return nil;  
      }  
  }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值