2013-01-09 77 views
2

有一種這樣的方法。有沒有辦法從Method結構中獲取參數的類類型?

- (void)method: (CustomClass)param; 

CustomClass繼承自NSObject

下面我有一個變量m,這是該方法的Method結構。 我調用method_getArgumentType()獲得參數類型是這樣的:

char szArgType[100] = {0,}; 
Method m = ...; 
... 
method_getArgumentType(m, 2, szArgType, 100); 

我打印szArgType。它打印@,但我想打印CustomClass。 在運行時,是否有一種很好的方法可以從Method獲取參數的真實對象類類型?

+0

另請參閱:[如何獲取ivar的ObjC類?](http://stackoverflow.com/questions/11265503/如何做我的目標-c-class-ivar/11266383#11266383) –

回答

7

這是不可能的。接口類型(類)僅由編譯器使用,並且在編碼方法簽名時不保留該信息。

運行時指南的Type Encodings chapter中描述了運行時唯一可以獲得的信息,即參數是否是與任何POD類型相對的對象。 任何對象的編碼將是相同的,無論它在那裏看到它的類,@。 (基本上,編譯器完成其類型檢查後,所有內容都是id)。

+0

謝謝。你的回答幫助了我。我使用結構而不是類,所以我可以通過method_getArgumentType方法檢查結構名稱。 – user1705636

+0

聰明的解決方案!很高興我能幫上忙。 –

相關問題