performSelector多参数
来源:互联网 发布:威纶通触摸屏编程手册 编辑:程序博客网 时间:2024/06/04 20:07
系统提供的performSelector最多只能传递两个参数,有的时候performSelector方法我们需要传递更多的参数,这个分类就能实现这个功能,仅供参考。
#import <Foundation/Foundation.h>@interface NSObject (PerformSelector)- (id)performSelector:(SEL)aSelector withObjects:(NSArray *)objects;@end
#import "NSObject+PerformSelector.h"@implementation NSObject (PerformSelector)- (id)performSelector:(SEL)aSelector withObjects:(NSArray *)objects{ //签名,一般包含了方法的名称/参数/返回值,签名一般用来设置参数和返回值的 NSMethodSignature *signature = [[self class] instanceMethodSignatureForSelector:aSelector]; //判断方法存不存在,不存在在此处理 if (!signature) { //方法不存在,抛一个异常异常 NSString *exception = [NSString stringWithFormat:@"%@ can not be found", NSStringFromSelector(aSelector)]; [NSException raise:@"method not exit:" format:exception, nil]; } //NSInvocation中保存了方法所属的对象/方法名称/参数/返回值 NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; invocation.target = self; invocation.selector = aSelector; //获取参数的数量:通过numberOfArguments获取的参数数量中包括了自带的self和_cmd NSUInteger argCount = signature.numberOfArguments - 2; //拿到给定数组的参数 NSUInteger arrCount = objects.count; //按照这两个长度的最小的哪一个进行赋值 NSUInteger count = MIN(argCount, arrCount); //变量数组 for (int i = 0; i < count; i++) { id obj = objects[i]; if ([obj isKindOfClass:[NSNull class]]) { obj = nil; } [invocation setArgument:&obj atIndex:i + 2]; } //调用NSInvocation对象的invoke方法 [invocation invoke]; //获取方法的返回值 id result = nil; if (signature.methodReturnLength != 0) { [invocation getReturnValue:&result]; } return result;}@end
1 0
- performSelector多参数
- performSelector多参数
- performSelector多个参数
- 实现performSelector 传递多个参数
- 实现performSelector 传递多个参数
- performselector参数生命周期问题
- 不一样的方式实现performSelector接收多个参数
- iOS中performSelector+@selector多参数传递解决方法
- performSelector,带多个参数,NSInvocation, NSMethodSignature
- performSelector: withObject传递参数用法
- performSelector
- performSelector
- performSelector
- PerformSelector
- performSelector
- 如何在 performSelector: withObject:afterDelay 的Object里传入多个参数
- 如何在 performSelector: withObject:afterDelay 的Object里传入多个参数
- IOS开发:performSelector: withObject:afterDelay 的Object里传入多个参数
- NOIP提高组2006 金明的预算方案
- HDU 1166 敌兵布阵【线段树】
- catalina.out文件过大
- CMake 基本使用方法--写CMakeList.txt
- Spring MVC 全注解的方式实现单个和多个文件上传
- performSelector多参数
- Contains Duplicate II
- LA4015 Caves
- markdown字体字号背景色
- LeetCode---Remove Nth Node From End of List
- 杨辉三角python实现
- Apple Watch如何进行真机调试及问题汇总
- Linux Epoll介绍和程序实例
- 严蔚敏数据结构习题3.31