2012-01-28 28 views
7

據我所知目標C是比C#或Java更動態的語言。在C#中,您只能知道調用者對象的類(使用堆棧跟蹤),但不知道調用者本身的實例引用。Objective C可以在運行時確定調用者對象引用(反射)嗎?

Objective-C更適合這個嗎?

更新:我看了這裏的其他職位How can I determine the "caller" of my method in Objective-C?。據我瞭解,它只提供班級名稱。我堅持認爲我不只對班級名稱感興趣,而且對參與者實例本身也有興趣。

+0

而不是重申你想要什麼,請解釋一下什麼是你正在嘗試做的。在Objective-C中獲取被調用者實例可能是不可能的,但是您的更高級別的問題可能以不同的方式解決。 – 2012-01-29 01:02:38

回答

6

這一點已經在這裏找到答案:

How can I determine the "caller" of my method in Objective-C?

答案不是特別漂亮,但。看起來沒有一種簡單可靠的方法可以做到,而不是通過堆棧查找,這可能是操作系統版本或平臺相關的。

你爲什麼要這樣做?也許還有另一個解決你的問題的方法。

+0

我看了另一篇文章。據我瞭解,它只提供班級名稱。我只對類名感興趣,但對實例本身不感興趣。 – user310291 2012-01-28 16:32:46

+0

那麼它可能是不可能的。正如其他人所說,Objective-C消息發送系統圍繞objc_msgSend()函數進行,該函數採用被調用者和選擇器參數,但不包含調用者。 – 2012-01-29 01:00:57

5

據我所知,你甚至無法獲得調用者的類。 Objective-C中的所有方法調用都通過objc_msgSend()進行路由,它將接收器,選擇器和方法的參數作爲參數。

接收器將是self和選擇器_cmd。調用者不參與方法調用。您只能返回堆棧跟蹤以瞭解方法被調用的位置。

+0

只要我可以閱讀,堆棧跟蹤只給出類名不是實例參考http://tombarta.wordpress.com/2008/08/01/c-stack-traces-with-gcc/ – user310291 2012-01-28 16:35:57

相關問題