2011-04-27 21 views

回答

8

被征服的主要問題是使語言工作。如果沒有ObjC運行時庫,則不能使用ObjC程序。

ObjC運行時庫實現了向對象發送消息,從類中查找方法實現,獲取類數據等。所有這些都不能在編譯時完成,因此它需要運行時支持。這種對運行時支持的需求孕育了ObjC運行時庫。

如果它與Objective-C有關,則可能是運行時庫在它後面。

作爲the documentation狀態,

此共享庫提供支持 爲 Objective-C語言的動態特性,並且因此是 由所有的Objective-C 應用鏈接到。

此引用有用主要用於 開發低級調試 Objective-C和其他語言,或 之間橋接層。

您可能想查看功能列表。有些人,如objc_msgSend,實施您可能錯誤認爲理所當然的行爲。例如,電話:

[foo bar:4]; 

實際上被編譯爲:

objc_msgSend(foo, sel_getUid("bar:"), 4); 

或東西沿着這些路線。

4

Zneak的答案是點亮的。如果您對顯式調用運行時可以做什麼感到好奇,那麼就像反射(finding information about classes),修改現有類,changing method implementations等等,這些都是程序運行時的情況。

+0

我一直在尋找如何獲得屬性列表。感謝您的代碼! – 2011-04-28 05:17:42

+0

我很高興你發現它很有用。我鏈接的代碼雖然有些詭異,但我只對某些特定情況感興趣,可能還有很多其他錯誤。如果你對運行時感興趣,我會建議Mike Ash提供的[MAObjCRuntime](https://github.com/mikeash/MAObjCRuntime)。 – zoul 2011-04-28 06:03:32

+0

太好了,謝謝,我也會研究一下。 – 2011-04-28 06:09:40