回答
请参阅文档NSMethodSignature
和-methodSignatureForSelector:
方法NSObject
。
您可以向对象询问它实现的任何选择器的方法签名,然后可以向方法签名实例发送-numberOfArguments
消息。
**第一解**
的解决方案是混合Objective-C运行函数和NSMethodSignature类。
首先,你需要包含一些头
#include <objc/objc.h>
#include <objc/objc-class.h>
#include <objc/objc-runtime.h>
然后,无论你想,从你的选择,你得到的参数的数量(请注意,每个方法有两个隐含参数自我和_cmd ,所以你必须不能指望他们有只有参数):
SEL sel = @selector(performSelector:onThread:withObject:waitUntilDone:);
Method m = class_getInstanceMethod([NSObject class], sel);
const char *encoding = method_getTypeEncoding(m);
NSMethodSignature *signature = [NSMethodSignature signatureWithObjCTypes:encoding];
int allCount = [signature numberOfArguments]; // The parameter count including the self and the _cmd ones
int parameterCount = allCount - 2; // Count only the method's parameters
**第二方案**
将您的选择器转换为NSString并计算“:”字符。不确定它是否可靠。
为什么不只是'NSMethodSignature *签名= [NSObject instanceMethodSignatureForSelector:sel];' – user102008 2012-04-20 17:39:21
计算冒号将起作用,至少在1989年以来我见过的每一个Obj-C版本都可以使用。;-) – NSResponder 2013-02-25 23:36:03
- 1. 如何正确选择关键字
- 2. 选择器关键字
- 3. 模型选择 - 此功能无效的关键字参数
- 4. 的Javascript“参数”关键字
- 5. Python的关键字参数
- 6. 如何指定文章选择的数字组件参数
- 7. 如何通过大量的关键字参数在python
- 8. 如何选择特定数量的特定数量的ID列?
- 9. 语法错误:关键字参数后非关键字参数
- 10. 如何从字符串参数中获取关键字参数?
- 11. 关键字参数/字典
- 12. 如何确定网页中关键字的出现次数?
- 13. 如何选择特定的参数来处理使用*参数?
- 14. ActionScript 2:如何确定关联数组中没有迭代的键的数量?
- 15. 修饰器,添加关键字参数
- 16. 如何选择一个Javascript选择器的参数?
- 17. 我们如何定义一个函数的可选关键字?
- 18. 为关键字参数任意数量的设置默认值
- 19. 如何使用选择关键字
- 20. 直通关键字参数
- 21. 确定printf参数的数量
- 22. JQuery - 如何计算选择器选择的元素数量?
- 23. 选择一定数量的行时,如何选择百分比?
- 24. 如何选择变量分配给函数的参数? -Javascript
- 25. 带int参数的选择器函数?
- 26. 如何确定1000个潜在关键字中的给定关键字?
- 27. 使用变量作为预定义关键字(Python)的函数的关键字
- 28. 如何在定时器选择器上传递参数
- 29. 如何知道来自数据库的关键字数量?
- 30. 将可变数量的参数传递给选择器
如果目标或目标类别都未知,该怎么办? – Kentzo 2013-02-22 10:26:22