RunTime運行時官方穩當翻譯(1)

轉自:http://blog.csdn.net/liangliang103377/article/details/39007683
Objective-C的運行時參考

配套指南
Objective-C的運行時編程指南
在宣布
IONDRVLibraries.h
NSObjCRuntime.h
objc / message.h
objc / objc-api.h
objc / objc.h
objc / runtime.h
官方源碼下載地址: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編碼。
“棄用”的意思是“過時的OS X 10.5版本的32位代碼,并禁止用于64位代碼。”

誰應閱讀本文件
該文件的目的是為讀者誰可能有興趣學習的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)
討論
參數類型的字符串復制到DST,DST充滿仿佛函數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
objc_getAssociatedObject
返回與給定鍵的特定對象關聯的值。

ID objc_getAssociatedObject(ID對象,空白*鍵)
參數
對象
源對象的關聯。

關鍵
密鑰對的關聯。

返回值
與該鍵相關聯的值鍵為對象。

空房
可在OS X v10.6中及更高版本。
另請參閱
objc_setAssociatedObject
宣稱
objc / runtime.h
objc_getClass
返回指定類的類定義。

ID objc_getClass(為const char *名)
參數

來查找類的名稱。

返回值
已命名的類的Class對象,或無如果類不與Objective-C的運行時注冊。

討論
objc_getClass不同于objc_lookUpClass中,如果類沒有注冊,objc_getClass調用類的處理程序回調,然后檢查第二次看有無類被注冊。objc_lookUpClass不會調用類的處理程序回調。

特別注意事項
此功能(之前到OS X 10.0版)的早期實現終止程序如果類不存在。

空房
可在OS X 10.0版和更高版本。
宣稱
objc / runtime.h
objc_getClassList
獲得注冊的類定義的列表。

INT objc_getClassList(等級*緩沖區,詮釋bufferLen)
參數
緩沖區
數組類的值。在輸出時,每一類的值指向一個類定義,最多為bufferLen或注冊類別的總數,以較低者為準。您可以通過空獲得注冊的類定義的總數沒有實際獲取的任何類定義。

bufferLen
一個整數值。傳已為其在分配空間的指針數的緩沖區。在返回時,該函數將填充元件僅這個號碼。如果這個數小于注冊的類的數量,則該函數返回注冊類的任意子集。

返回值
一個整數值,指示注冊的類的總數量。

討論
在Objective-C的運行時庫會自動記錄所有在源代碼中定義的類。你可以在運行時創建的類的定義,并與注冊它們objc_addClass功能。

清單1展示了如何使用這個功能來檢索所有已注冊在當前進程中的Objective-C運行時的類定義。

清單1 使用objc_getClassList
INT numClasses;
類*類= NULL;

類= NULL;
numClasses = objc_getClassList(NULL,0);

如果(numClasses> 0)
{
班= malloc的(大小(類)* numClasses);
numClasses = objc_getClassList(類,numClasses);
免費(類);
}
特別注意事項
你不能假設你從這個函數獲得這個類的對象是來自繼承的類NSObject的,所以你不能安全地呼吁這樣的類的任何方法,而沒有檢測方法,首先實現的。

空房
可在OS X 10.0版和更高版本。
宣稱
objc / runtime.h
objc_getFutureClass
使用CoreFoundation的免費橋接。

類objc_getFutureClass(為const char *名)
特別注意事項
不要自己調用這個函數。

空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
objc_getMetaClass
返回指定類的元類的定義。

ID objc_getMetaClass(為const char *名)
參數

來查找類的名稱。

返回值
該類別的命名類的元類對象,或者為零如果類不與Objective-C的運行時注冊。

討論
如果對于指定的類的定義中未注冊,則該函數調用的類的處理程序的回調,然后檢查第二時間,以查看是否在類中注冊。然而,每一個類都必須有一個有效的元類的定義,所以元類的定義總是返回,無論是合法與否。

空房
可在OS X 10.0版和更高版本。
宣稱
objc / runtime.h
objc_getProtocol
返回指定的協議。

協議* objc_getProtocol(為const char *名)
參數

協議的名稱。

返回值
指定的協議的名稱,或空,如果沒有指定協議名稱可能會被發現。

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

空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
objc_getRequiredClass
返回指定類的類定義。

ID objc_getRequiredClass(為const char *名)
參數

來查找類的名稱。

返回值
Class對象的命名類。

討論
這個功能是一樣的objc_getClass,但終止進程,如果沒有找到這個類。

這個函數由ZeroLink,其中沒有找到一類是沒有ZeroLink編譯時鏈接錯誤。

空房
可在OS X 10.0版和更高版本。
宣稱
objc / runtime.h
objc_loadWeak
加載由弱指針引用的對象并返回它。

ID objc_loadWeak(ID *位置)
參數
位置
弱指針的地址。

返回值
該對象所指向的位置,或零,如果位置是零。

討論
該功能通過加載一個弱指針引用的對象,保留和自動釋放該對象后返回。其結果是,該對象保持活著足夠長的主叫用戶來使用它。這個功能通常用于任何地方__weak變量用于在表達式。

空房
可在OS X v10.7及更高版本。
宣稱
objc / runtime.h
objc_lookUpClass
返回指定類的類定義。

ID objc_lookUpClass(為const char *名)
參數

來查找類的名稱。

返回值
已命名的類的Class對象,或無如果類不與Objective-C的運行時注冊。

討論
objc_getClass是從這個函數不同,如果這個類沒有注冊,objc_getClass調用類的處理程序回調,然后檢查第二次看有無類被注冊。該函數不調用類的處理程序回調。

空房
可在OS X 10.0版和更高版本。
宣稱
objc / runtime.h
objc_msgSend
發送一個簡單的返回值的消息,一個類的實例。

ID objc_msgSend(ID自我,SEL運算,...)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,333評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,491評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,263評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,946評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,708評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,409評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,939評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,774評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,641評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,872評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,650評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容