回答
請參閱文檔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