Objective-C Runtime官放文檔翻譯

官方源碼下載地址:http://download.csdn.net/detail/liangliang103377/8700843
概述
本文檔介紹了OS X的Objective-C 2.0運行庫支持的函數和數據結構。該功能是在發現共享庫實現/usr/lib/libobjc.A.dylib
。這個共享庫提供支持,為Objective-C語言的動態特性,并因此被所有的Objective-C應用程序鏈接。
該參考主要是為了開發Objective-C和其他語言之間的橋梁層,或低級別的調試。通常,您不需要在Objective-C編程時直接使用Objective-C的運行時庫。
在OS X實現了Objective-C的運行時庫是獨一無二的蘋果。對于其他平臺,GNU編譯器集提供了不同的執行情況,類似的API。本文只包括Mac OS X的執行情況。
低級別的Objective-C的運行時API是OS X 10.5版本顯著更新。許多功能和所有現有的數據結構將被替換為新的功能。舊的功能和結構已過時的32位和缺席的64位模式。該API限制幾個值到32位的整數,即使在64位模式下-級計數,計數的協議,每類方法,每個類實例變量,每個方法的參數,每個方法的sizeof(所有參數)和類的版本號。此外,新的Objective-C的ABI(此處不作討論),進一步約束大小(anInstance)為32位,而其他三個值,以24%的類比特的方法,每個類實例變量和大小(單伊娃)。最后,過時NXHashTable和NXMapTable被限制在4十億的項目。字符串編碼: 所有的char *
運行時API中,應考慮到有UTF-8編碼。

<code>“棄用”的意思是“過時的OS X 10.5版本的32位代碼,并禁止用于64位代碼。”</code>
誰應閱讀本文件
該文件的目的是為讀者誰可能有興趣學習的Objective-C的運行時。
因為這不是一個關于C文件,它假定了一些以前的熟人與該語言。然而,它并不必須是一個廣泛的熟人。
職能任務
使用類
class_getName

class_getSuperclass

class_isMetaClass

class_getInstanceSize

class_getInstanceVariable

class_getClassVariable

class_addIvar

class_copyIvarList

class_getIvarLayout

class_setIvarLayout

class_getWeakIvarLayout

class_setWeakIvarLayout

class_getProperty

class_copyPropertyList

class_addMethod

class_getInstanceMethod

class_getClassMethod

class_copyMethodList

class_replaceMethod

class_getMethodImplementation

class_getMethodImplementation_stret

class_respondsToSelector

class_addProtocol

class_addProperty

class_replaceProperty

class_conformsToProtocol

class_copyProtocolList

class_getVersion

class_setVersion

objc_getFutureClass

objc_setFutureClass

class_setSuperclass
已過時的OS X V10.5

添加類
objc_allocateClassPair

objc_disposeClassPair

objc_registerClassPair

objc_duplicateClass

類的實例化
class_createInstance

objc_constructInstance

objc_destructInstance

用工作實例
object_copy

object_dispose

object_setInstanceVariable

object_getInstanceVariable

object_getIndexedIvars

object_getIvar

object_setIvar

object_getClassName

object_getClass

object_setClass

獲取類定義
objc_getClassList

objc_copyClassList

objc_lookUpClass

objc_getClass

objc_getRequiredClass

objc_getMetaClass

使用實例變量工作
ivar_getName

ivar_getTypeEncoding

ivar_getOffset

聯想參考
objc_setAssociatedObject

objc_getAssociatedObject

objc_removeAssociatedObjects

發送消息
當它遇到一個方法調用時,編譯器可能會生成調用任意幾個函數來執行實際的消息調度,根據不同的接收器,返回值和參數。您可以使用這些功能來動態地從你自己的純C代碼中調用方法,或者使用不NSObject的公司允許說法的形式進行......
方法。這些函數在聲明/usr/include/objc/objc-runtime.h

objc_msgSend
發送一個消息,一個簡單的返回值的類的實例。

objc_msgSend_stret
發送與數據結構返回值的消息,一個類的實例。

objc_msgSendSuper
發送一個消息,一個簡單的返回值的類的實例的超類。

objc_msgSendSuper_stret
發送消息與數據結構返回值的類的實例的超類。

objc_msgSend

objc_msgSend_fpret

objc_msgSend_stret

objc_msgSendSuper

objc_msgSendSuper_stret

與工作方法
method_invoke

method_invoke_stret

method_getName

method_getImplementation

method_getTypeEncoding

method_copyReturnType

method_copyArgumentType

method_getReturnType

method_getNumberOfArguments

method_getArgumentType

method_getDescription

method_setImplementation

method_exchangeImplementations

使用庫
objc_copyImageNames

class_getImageName

objc_copyClassNamesForImage

與選擇器的工作
sel_getName

sel_registerName

sel_getUid

sel_isEqual

與合作協議
objc_getProtocol

objc_copyProtocolList

objc_allocateProtocol

objc_registerProtocol

protocol_addMethodDescription

protocol_addProtocol

protocol_addProperty

protocol_getName

protocol_isEqual

protocol_copyMethodDescriptionList

protocol_getMethodDescription

protocol_copyPropertyList

protocol_getProperty

protocol_copyProtocolList

protocol_conformsToProtocol

與工作性質
property_getName

property_getAttributes

property_copyAttributeValue

property_copyAttributeList

使用Objective-C語言特征
objc_enumerationMutation

objc_setEnumerationMutationHandler

imp_implementationWithBlock

imp_getBlock

imp_removeBlock

objc_loadWeak

objc_storeWeak

功能
class_addIvar
增加了一個新的實例變量的類。
布爾class_addIvar(CLS級,為const char *的名字,為size_t大小,uint8_t有調整,為const char *類型)
返回值
是的
,如果實例變量添加成功,否則NO
(例如,類已經包含了該名稱的實例變量)。

討論
此功能可能僅在被稱為objc_allocateClassPair
之前objc_registerClassPair
。添加一個實例變量到一個已經存在的類不支持。
這個類不能是元類。添加一個實例變量來元類不支持。
以字節為單位的實例變量的最小對齊是1 <<對齊
。一個實例變量的最小對齊取決于伊娃的類型和機器架構。對于任何指針類型的變量,通過LOG2(sizeof運算(POINTER_TYPE))

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

class_addMethod
增加了一個新的方法,一類具有給定名稱和實施。
布爾class_addMethod(CLS級,SEL名,IMP IMP,為const char *類型)
參數
CLS
類要添加的方法。


一個選擇器,用于指定方法的名稱被添加。

IMP
的函數,而新方法的實現。該函數必須至少有兩個arguments- 自我
和_cmd

類型
描述的參數的類型的方法,字符數組。對于可能的值,看Objective-C的運行時編程指南 > “輸入編碼”。因為該函數必須至少有兩個arguments- 自我
和_cmd
,第二和第三個字符必須是“ @
“ (第一個字符是返回類型)。

返回值
是的
,如果該方法成功地添加,否則NO
(例如,類已經包含了一個方法實現了這個名字)。

討論
class_addMethod
將添加一個超類的實現的覆蓋,但不會取代此類現有的實現。要更改現有的實現,使用method_setImplementation

一個Objective-C的方法是一個簡單的C函數需要至少兩個arguments- 自我
和_cmd
。例如,考慮下面的函數:
無效myMethodIMP(ID自我,SEL _cmd)

{

//實現....

}

您可以動態地將其添加到類中的方法(稱為resolveThisMethodDynamically
)所示:
class_addMethod([個體經營類],@selector(resolveThisMethodDynamically),(IMP)myMethodIMP,“V @”);

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

class_addProperty
添加一個屬性類。
布爾class_addProperty(CLS級,為const char *名,常量objc_property_attribute_t *屬性,無符號整型attributeCount)
參數
CLS
這個類進行修改。


該屬性的名稱。

屬性
物業數組屬性。

attributeCount
中的屬性數目的屬性

返回值
是的
,如果該屬性已成功添加; 否則NO
(例如,這個函數返回NO
,如果該類已經擁有該屬性)。

空房
可在OS X v10.7及更高版本。

另請參閱
class_replaceProperty

宣稱
objc / runtime.h

class_addProtocol
增加了一個協議,一個類。
布爾class_addProtocol(CLS級,協議*協議)
參數
CLS
這個類進行修改。

outCount
該協議添加到CLS

返回值
YES
如果協議被成功添加,否則編號
(例如,類已符合該協議)。

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

class_conformsToProtocol
返回一個布爾值,表示一個類是否符合給定的協議。
布爾class_conformsToProtocol(CLS級,協議*協議)
參數
CLS
類要檢查。

協議
的協議。

返回值
是的
,如果CLS符合協議,否則無

討論
你通常應該使用NSObject的
conformsToProtocol:
代替此功能的方法。

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

class_copyIvarList
描述一個類中聲明的實例變量。
伊瓦爾·class_copyIvarList(CLS級,無符號整型* outCount)
參數
CLS
該類檢查。

outCount
在返回時,包含了返回的數組的長度。如果outCount是空
,是不是返回的長度。

返回值
伊瓦類型的指針,描述了類聲明的實例變量的數組。由超聲明的實例變量不包括在內。該數組包含* outCount
指針后跟一個空
終止符。您必須釋放與陣列免費的()

如果類沒有聲明實例變量,或者CLS
是零
,NULL,
則返回和* outCount
為0

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

class_copyMethodList
描述了一個類實現的實例方法。
方法* class_copyMethodList(CLS級,無符號整型* outCount)
參數
CLS
類要檢查。

outCount
在返回時,包含了返回的數組的長度。如果outCount是空
,是不是返回的長度。

返回值
類型的指針數組的方法
不包含說明通過超類實現的類的任何實例方法實現的實例方法。該數組包含* outCount
指針后跟一個空
終止符。您必須釋放與陣列免費的()

如果CLS沒有實現的實例方法,或者CLS是零
,則返回空值
和* outCount
為0

討論
為了得到一個類的類的方法,使用class_copyMethodList(object_getClass(CLS),及計數)

要獲取方法的實現,可以通過父類來實現,使用class_getInstanceMethod
class_getClassMethod

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

class_copyPropertyList
描述一個類中聲明的屬性。
objc_property_t * class_copyPropertyList(CLS級,無符號整型* outCount)
參數
CLS
類要檢查。

outCount
在返回時,包含了返回的數組的長度。如果outCount是空
,是不是返回的長度。

返回值
類型的指針數組objc_property_t
描述的類聲明的屬性。不包括超類中聲明的所有屬性。該數組包含* outCount
指針后跟一個空
終止符。您必須釋放與陣列免費的()

如果CLS聲明沒有屬性,或者CLS是零
,則返回空值
和* outCount
為0

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

class_copyProtocolList
描述了通過一個類的協議。
協議** class_copyProtocolList(CLS級,無符號整型* outCount)
參數
CLS
類要檢查。

outCount
在返回時,包含了返回的數組的長度。如果outCount是空
,是不是返回的長度。

返回值
類型的指針數組協議*
說明通過類的協議。采用超或其他協議的任何協議不包括在內。該數組包含* outCount
指針后跟一個空
終止符。您必須釋放與陣列免費的()

如果CLS采用無協議或CLS是零
,則返回空值
和* outCount
為0

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

class_createInstance
創建一個類的實例,這個類在默認的malloc內存區分配內存。
ID class_createInstance(CLS級,為size_t extraBytes)
參數
CLS
要分配的一個實例的類。

extraBytes
一個整數,指示的額外字節數來分配。中的附加字節可以被用于存儲以外的類定義中所定義的附加的實例變量。

返回值
這個類的一個實例CLS

空房
可在OS X 10.0版和更高版本。

另請參閱
objc_constructInstance

宣稱
objc / runtime.h

class_getClassMethod
返回一個指針,指向的數據結構描述為一個給定的類指定類方法。
方法class_getClassMethod(類類的一個,SEL aSelector)
參數
ACLASS
一個指針,指向一個類定義。通過包含您要檢索的方法的類。

aSelector
類型的指針SEL
。傳給你要檢索的方法的選擇。

返回值
一個指針,指向的方法
對應于由指定的選擇器的實現數據結構aSelector由指定的類類的一個或NULL,
如果指定的類或者它的超類不包含的類的方法用指定的選擇。

討論
請注意,此功能搜索超供實現,而class_copyMethodList
沒有。

空房
可在OS X 10.0版和更高版本。

宣稱
objc / runtime.h

class_getClassVariable
返回伊瓦爾
對于給定的類的指定類變量。
伊瓦爾class_getClassVariable(CLS級,為const char *名)
參數
CLS
類定義的類變量,你希望獲得。


來獲得類的變量定義的名稱。

返回值
一個指針,指向一個伊瓦爾
包含有關所指定的類變量信息的數據結構的名稱

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

class_getImageName
返回動態庫中的類源自的名稱。
為const char * class_getImageName(CLS級)
參數
CLS
您詢問的類。

返回值
C字符串表示包含該庫的名稱CLS級。

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

class_getInstanceMethod
返回指定實例方法對于給定的類。
方法class_getInstanceMethod(類類的一個,SEL aSelector)
參數
ACLASS
類要檢查。

aSelector
要檢索的方法的選擇。

返回值
對應于由指定的選擇器的實現方法aSelector由指定的類類的一個或NULL,
如果指定的類或者它的超類不包含的實例方法使用指定的選擇。

討論
請注意,此功能搜索超供實現,而class_copyMethodList
沒有。

空房
可在OS X 10.0版和更高版本。

宣稱
objc / runtime.h

class_getInstanceSize
返回一個類的實例的大小。
為size_t class_getInstanceSize(CLS級)
參數
CLS
一個Class對象。

返回值
在類的實例的字節大小CLS,或者0
,如果CLS是零

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

class_getInstanceVariable
返回伊瓦爾
對于給定的類的指定實例變量。
伊瓦爾class_getInstanceVariable(CLS級,為const char *名)
參數
CLS
這個類的實例變量,你希望獲得。


獲取實例變量定義的名稱。

返回值
一個指針,指向一個伊瓦爾
包含有關被指定的實例變量信息的數據結構的名稱

空房
可在OS X 10.0版和更高版本。

宣稱
objc / runtime.h

class_getIvarLayout
返回的描述伊瓦爾
布局對于一個給定的類。
為const char * class_getIvarLayout(CLS級)
參數
CLS
該類檢查。

返回值
的描述伊瓦
布局CLS

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

class_getMethodImplementation
返回的函數指針,如果一個特定的消息被發送到一個類的實例,將被調用。
進出口class_getMethodImplementation(CLS級,SEL名)
參數
CLS
類要檢查。


一個選擇。

返回值
函數指針,如果那被稱為[對象名稱]
被稱為與類的實例,或者為NULL
,如果CLS是零

討論
class_getMethodImplementation
可能比快method_getImplementation(class_getInstanceMethod(CLS,名稱))

返回的函數指針可能是內部的運行,而不是一個實際的方法實現的功能。例如,如果該類的實例不來選擇響應,返回的函數指針將是運行時的消息轉發機制的一部分。

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

class_getMethodImplementation_stret
返回的函數指針,如果一個特定的消息被發送到一個類的實例,將被調用。
進出口class_getMethodImplementation_stret(CLS級,SEL名)
參數
CLS
類要檢查。


一個選擇。

返回值
函數指針,如果那被稱為[對象名稱]
被稱為與類的實例,或者為NULL
,如果CLS是零

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

class_getName
返回類的名稱。
為const char * class_getName(CLS級)
參數
CLS
一個Class對象。

返回值
類的名稱,或者空字符串CLS是零

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

class_getProperty
返回與給定類的給定名稱的屬性。
objc_property_t class_getProperty(CLS級,為const char 名)
返回值
類型的指針objc_property_t
描述性,或空
,如果類沒有使用該名稱,或者聲明一個屬性為NULL
,如果
CLS*是零

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

class_getSuperclass
返回一個類的父類。
類class_getSuperclass(CLS級)
參數
CLS
一個Class對象。

返回值
該類的超類,或無
,如果CLS是根類,或無
,如果CLS是零

討論
你通常應該使用NSObject的
超類
來代替這一功能的方法。

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

class_getVersion
返回一個類定義的版本號。
INT class_getVersion(類theClass描述)
參數
theClass描述
一個指針,指向一個
的數據結構。通過對您想要獲取版本的類的定義。

返回值
的整數,指示在類定義的版本號。

討論
您可以使用類定義的版本號為您的類代表其他類接口的版本。這是用于對象序列特別有用(即,在一個扁平的形式的對象的歸檔),在那里它的變化認識到在不同的類定義版本的實例變量的布局是非常重要的。
從基礎架構派生類NSObject的
類可以獲取使用的類定義版本號的getVersion
類方法,它是利用實施class_getVersion
功能。

空房
可在OS X 10.0版和更高版本。

宣稱
objc / runtime.h

class_getWeakIvarLayout
返回弱布局的描述伊瓦爾
為了一個給定的類。
為const char * class_getWeakIvarLayout(CLS級)
參數
CLS
該類檢查。

返回值
弱布局的描述伊瓦
S代表CLS

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

class_isMetaClass
返回一個布爾值,表示一個類對象是否是一個元類。
布爾class_isMetaClass(CLS級)
參數
CLS
一個Class對象。

返回值
是的
,如果CLS是一個元類,NO
,如果CLS是一種非Meta類,NO
,如果CLS是零

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

class_replaceMethod
替換為一個給定的類中的方法的實現。
進出口class_replaceMethod(CLS級,SEL名,IMP IMP,為const char *類型)
參數
CLS
類要修改。


選擇器是標識要替換它的實現方法。

IMP
新的實現對于所確定的方法名稱所標識的類CLS

類型
描述的參數的類型的方法,字符數組。對于可能的值,看Objective-C的運行時編程指南 > “輸入編碼”。因為該函數必須至少有兩個arguments- 自我
和_cmd
,第二和第三個字符必須是“ @
“ (第一個字符是返回類型)。

返回值
以前的實現所確定的方法的名字所標識的類CLS

討論
這個函數的作用有兩種不同的方式:
如果確定該方法的名稱不存在,它被添加仿佛class_addMethod
被稱為。通過所指定的類型的編碼類型被用作給定。

如果確定了該方法的名字存在,其IMP被替換仿佛method_setImplementation
被調用。通過指定類型的編碼類型被忽略。

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

class_replaceProperty
替換類的屬性。
無效class_replaceProperty(CLS級,為const char *名,常量objc_property_attribute_t *屬性,無符號整型attributeCount)
參數
CLS
這個類進行修改。


該屬性的名稱。

屬性
物業數組屬性。

attributeCount
中的屬性數目的屬性

空房
可在OS X v10.7及更高版本。

另請參閱
class_addProperty

宣稱
objc / runtime.h

class_respondsToSelector
返回一個布爾值,表示一個類的實例是否在一個特定的選擇做出回應。
布爾class_respondsToSelector(CLS級,SEL SEL)
參數
CLS
類要檢查。

SEL
一個選擇。

返回值
是的
,如果該類的實例響應選擇,否則無

討論
你通常應該使用NSObject的
respondsToSelector:
instancesRespondToSelector:
方法代替此功能。

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

class_setIvarLayout
設置伊瓦爾
對于一個給定的類布局。
無效class_setIvarLayout(CLS級,為const char *布局)
參數
CLS
這個類進行修改。

布局
的布局伊瓦
S代表CLS

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

class_setVersion
設置一個類定義的版本號。
無效class_setVersion(類theClass描述,詮釋的版本)
參數
theClass描述
一個指針,指向一個
的數據結構。通過要為其設置版本的類的定義。

版本
一個整數。通過類定義的新的版本號。

討論
您可以使用類定義的版本號為您的類代表其他類接口的版本。這是用于對象序列特別有用(即,在一個扁平的形式的對象的歸檔),在那里它的變化認識到在不同的類定義版本的實例變量的布局是非常重要的。
從基礎架構派生類NSObject的
類可以使用設置類定義的版本號setVersion中:
類方法,它是利用實施class_setVersion
功能。

空房
可在OS X 10.0版和更高版本。

宣稱
objc / runtime.h

class_setWeakIvarLayout
設置為弱的布局伊瓦爾
為了一個給定的類。
無效class_setWeakIvarLayout(CLS級,為const char *布局)
參數
CLS
這個類進行修改。

布局
弱布局伊娃
S代表CLS

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

imp_getBlock
返回與相關的塊IMP
使用創建的imp_implementationWithBlock

ID imp_getBlock(IMP anImp)
參數
anImp
該公司
調用該塊。

返回值
調用塊anImp

空房
可在OS X v10.7及更高版本。

另請參閱
imp_implementationWithBlock

宣稱
objc / runtime.h

imp_implementationWithBlock
創建一個指向函數的指針調用時調用該方法的指定塊。
進出口imp_implementationWithBlock(ID塊)
參數

實現此方法的程序段。簽名應method_return_type ^(ID自我,自我,method_args ...)
。該方法的選擇是不提供給方框被復制與Block_copy()

返回值
公司
調用。你必須處理返回的進出口
使用的功能。

空房
可在OS X v10.7及更高版本。

另請參閱
imp_getBlock

宣稱
objc / runtime.h

imp_removeBlock
解除關聯從一個塊IMP
使用創建的imp_implementationWithBlock
,并釋放所創建的塊的副本。
布爾imp_removeBlock(IMP anImp)
參數
anImp
一個IMP
使用創建的imp_implementationWithBlock
功能。

返回值
是的
,如果該塊被成功釋放; 否則,編號
(例如,該函數返回NO
如果塊沒有被用來創建anImp以前)。

空房
可在OS X v10.7及更高版本。

另請參閱
imp_implementationWithBlock

宣稱
objc / runtime.h

ivar_getName
返回一個實例變量的名稱。
為const char * ivar_getName(伊娃伊娃)
返回值
C字符串包含實例變量的名字。

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

ivar_getOffset
實例變量返回的偏移量。
ptrdiff_t的ivar_getOffset(伊娃伊娃)
討論
對于類型的實例變量標識
或其他對象的類型,調用object_getIvar
object_setIvar
使用該偏移量來直接訪問該實例變量的數據來代替。

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

ivar_getTypeEncoding
返回一個實例變量的類型的字符串。
為const char * ivar_getTypeEncoding(伊娃伊娃)
返回值
C字符串包含實例變量的類型編碼。

討論
對于可能的值,看Objective-C的運行時編程指南 > “輸入編碼”

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

method_copyArgumentType
返回描述方法的一個參數類型的字符串。
char *的method_copyArgumentType(方法方法,無符號整型指數)
參數
方法
該方法檢查。

指數
該參數的索引進行檢查。

返回值
C字符串描述參數的索引類型索引,或者為NULL
,如果方法沒有參數指標指數。您必須釋放字符串免費的()

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

method_copyReturnType
返回描述方法的返回類型的字符串。
char *的method_copyReturnType(法法)
參數
方法
該方法檢查。

返回值
C字符串描述返回類型。您必須釋放字符串免費的()

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

method_exchangeImplementations
交流兩種方法的實現。
無效method_exchangeImplementations(方法M1,M2的方法)
討論
這是下面的一個原子的版本:
進出口IMP1 = method_getImplementation(M1);

進出口IMP2 = method_getImplementation(M2);

method_setImplementation(M1,IMP2);

method_setImplementation(M2,IMP1);

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

method_getArgumentType
返回參照描述方法的一個參數類型的字符串。
無效method_getArgumentType(方法方法,unsigned int類型的索引,char 的DST,為size_t dst_len)
討論
參數類型的字符串復制到
DSTDST充滿仿佛函數strncpy(DST,parameter_type,dst_len)
被調用。如果該方法包含與該指數沒有參數,
DST*充滿仿佛函數strncpy(DST,“”,dst_len)
被調用。

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

method_getDescription
返回的方法描述結構的特定方法。
結構objc_method_description * method_getDescription(方法M)
參數

該方法要打聽。

返回值
一個objc_method_description
結構,描述根據指定的方法

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

method_getImplementation
返回一個方法的實現。
進出口method_getImplementation(法法)
參數
方法
該方法檢查。

返回值
類型的函數指針進出口

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

method_getName
返回一個方法的名稱。
SEL method_getName(法法)
參數
方法
該方法檢查。

返回值
SEL類型的指針。

討論
要獲取方法的名稱為C字符串,調用sel_getName(method_getName(法))

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

method_getNumberOfArguments
返回由法接受的參數的個數。
無符號method_getNumberOfArguments(法法)
參數
方法
一個指向方法
的數據結構。通過有問題的方法。

返回值
包含由給定的方法接受的參數數量的整數。

空房
可在OS X 10.0版和更高版本。

宣稱
objc / runtime.h

method_getReturnType
通過引用返回一個描述方法的返回類型的字符串。
無效method_getReturnType(方法方法,char 的DST,為size_t dst_len)
討論
該方法的返回類型為字符串復制到
夏令時夏令時*是充滿仿佛函數strncpy(DST,parameter_type,dst_len)
被調用。

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

method_getTypeEncoding
返回描述方法的參數和返回類型的字符串。
為const char * method_getTypeEncoding(法法)
參數
方法
該方法檢查。

返回值
C字符串。該字符串可以是NULL

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

method_invoke
調用指定的方法的實現。
ID method_invoke(ID接收器,法米,...)
參數
接收器
一個指針,指向要調用的方法的類的實例。這個值不能為零


該方法要調用它的實現。

......
可變參數列表包含參數的方法。

返回值
該方法的返回值。

討論
使用此功能來調用一個方法的實現比調用更快method_getImplementation
method_getName

空房
可在OS X V10.5及更高版本。

宣稱
objc / message.h

method_invoke_stret
調用指定的方法,返回一個數據結構的實現。
無效method_invoke_stret(ID接收器,法米,...)
參數
接收器
一個指針,指向要調用的方法的類的實例。這個值不能為零


該方法要調用它的實現。

......
可變參數列表包含參數的方法。

討論
使用此功能來調用一個方法的實現比調用更快method_getImplementation
method_getName

空房
可在OS X V10.5及更高版本。

宣稱
objc / message.h

method_setImplementation
設置一個方法的實現。
進出口method_setImplementation(方法方法,IMP IMP)
返回值
以前的實施方法。

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

objc_allocateClassPair
創建一個新的類和元類。
objc_allocateClassPair(父類,為const char *名,為size_t extraBytes)
參數

類為新類的超類使用,或無
以創建一個新的根類。


將字符串作為新的類的名稱使用。該字符串將被復制。

extraBytes
的字節數來分配的索引實例變量在類與元類對象的結束。這通常應為0

返回值
新的類,或者無
如果不能創建的類(例如,所需的名稱已被使用)。

討論
你可以通過調用得到一個指向新的元類object_getClass(的NewClass)

要創建一個新的類,通 ??過調用啟動objc_allocateClassPair
。然后設置類的屬性與像功能class_addMethod
class_addIvar
。當您完成建設類,調用objc_registerClassPair
。新類是現在可以使用了。
實例方法和實例變量應該被添加到類本身。類的方法應該被添加到元類。

空房
可在OS X V10.5及更高版本。

另請參閱
objc_disposeClassPair

宣稱
objc / runtime.h

objc_allocateProtocol
創建一個新的協議實例。
協議* objc_allocateProtocol(為const char *名)
參數

你要創建的協議的名稱。

返回值
一個新的協議實例或零
,如果使用相同的名稱作為協議的名稱已經存在。

討論
您必須注冊到返回的協議實例objc_registerProtocol
功能,然后才能使用它。
沒有與此功能相關聯的dispose方法。

空房
可在OS X v10.7及更高版本。

另請參閱
objc_registerProtocol

宣稱
objc / runtime.h

objc_constructInstance
在指定位置創建一個類的實例。
ID objc_constructInstance(CLS級,無效*字節)
參數
CLS
要分配的一個實例的類。

字節
在該分配的實例的位置CLS級。字節神秘島點至少class_getInstanceSize(CLS)
以及對齊,零填充的內存字節。

返回值
這個類的一個實例CLS字節數,如果成功; 否則為零
(例如,如果CLS字節本身是零
)。

空房
可在OS X v10.6中及更高版本。

另請參閱
class_createInstance

宣稱
objc / runtime.h

objc_copyClassList
創建并返回指向所有注冊類定義的列表。
類* objc_copyClassList(無符號整數* outCount)
參數
outCount
一個整數的指針,用來存儲在列表中該函數返回類的數量。此參數可以是零

返回值
á 無
終止的類數組。您必須釋放與陣列免費的()

空房
可在OS X v10.7及更高版本。

另請參閱
objc_getClassList

宣稱
objc / runtime.h

objc_copyClassNamesForImage
返回在指定庫或框架的所有類的名稱。
為const char ** objc_copyClassNamesForImage(為const char 的圖像,無符號整型 outCount)
參數
圖片
庫或框架,你打聽。

outCount
返回的數組中的類名的數量。

返回值
C字符串代表了所有指定的庫或框架中的類名數組。

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

objc_copyImageNames
返回所有已加載的Objective-C框架和動態庫的名字。
為const char ** objc_copyImageNames(無符號整數* outCount)
參數
outCount
返回的數組中人名的數目。

返回值
C字符串表示所有已加載的Objective-C框架和動態庫的名稱的數組。

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

objc_copyProtocolList
返回所有已知的運行協議的數組。
協議** objc_copyProtocolList(無符號整數* outCount)
參數
outCount
返回時,包含返回的數組中的協議數量。

返回值
交流陣列中所有已知的運行時的協議。該數組包含* outCount
指針后跟一個空
終止符。您必須釋放列表免費的()

討論
這個函數獲取運行時鎖定。

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

objc_destructInstance
銷毀一個類的實例沒有釋放內存,并刪除任何相關參考資料。
無效objc_destructInstance(ID OBJ)
討論
此方法不執行任何操作,如果OBJ是零

重要提示: 在垃圾回收器不會調用這個函數。因此,如果你編輯這個功能,你應該也可以編輯完成。也就是說,核心基金及其他客戶做的叫垃圾收集下此功能。

空房
可在OS X v10.6中及更高版本。

另請參閱
objc_constructInstance

宣稱
objc / runtime.h

objc_disposeClassPair
破壞類及其相關的元類。
無效objc_disposeClassPair(CLS級)
參數
CLS
該類被破壞。這個類必須已經使用分配objc_allocateClassPair

討論
不要調用這個函數,如果實例CLS存在的類或任何子類。

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

objc_duplicateClass
用基金會的鍵 - 值觀察。
objc_duplicateClass
特別注意事項
不要自己調用這個函數。

空房
可在OS X V10.5及更高版本。

宣稱
objc / runtime.h

objc_enumerationMutation
通過在一個foreach循環中檢測到突變的編譯器插入。
無效objc_enumerationMutation(ID OBJ)
參數
OBJ
對象被突變。

討論
編譯器插入此功能檢測到的對象是一個foreach迭代過程中發生突變的時候。當變異發生在函數被調用,如果它被設置(通過枚舉突變處理程序制定objc_setEnumerationMutationHandler
功能)。如果處理器沒有建立起來,出現致命錯誤。

空房
可在OS X V10.5及更高版本。

另請參閱
objc_setEnumerationMutationHandler

宣稱
objc / runtime.h

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容