官方源碼下載地址:http://download.csdn.net/detail/liangliang103377/8700843
概述
本文檔介紹了OS X的Objective-C 2.0運(yùn)行庫支持的函數(shù)和數(shù)據(jù)結(jié)構(gòu)。該功能是在發(fā)現(xiàn)共享庫實(shí)現(xiàn)/usr/lib/libobjc.A.dylib
。這個(gè)共享庫提供支持,為Objective-C語言的動(dòng)態(tài)特性,并因此被所有的Objective-C應(yīng)用程序鏈接。
該參考主要是為了開發(fā)Objective-C和其他語言之間的橋梁層,或低級(jí)別的調(diào)試。通常,您不需要在Objective-C編程時(shí)直接使用Objective-C的運(yùn)行時(shí)庫。
在OS X實(shí)現(xiàn)了Objective-C的運(yùn)行時(shí)庫是獨(dú)一無二的蘋果。對(duì)于其他平臺(tái),GNU編譯器集提供了不同的執(zhí)行情況,類似的API。本文只包括Mac OS X的執(zhí)行情況。
低級(jí)別的Objective-C的運(yùn)行時(shí)API是OS X 10.5版本顯著更新。許多功能和所有現(xiàn)有的數(shù)據(jù)結(jié)構(gòu)將被替換為新的功能。舊的功能和結(jié)構(gòu)已過時(shí)的32位和缺席的64位模式。該API限制幾個(gè)值到32位的整數(shù),即使在64位模式下-級(jí)計(jì)數(shù),計(jì)數(shù)的協(xié)議,每類方法,每個(gè)類實(shí)例變量,每個(gè)方法的參數(shù),每個(gè)方法的sizeof(所有參數(shù))和類的版本號(hào)。此外,新的Objective-C的ABI(此處不作討論),進(jìn)一步約束大?。╝nInstance)為32位,而其他三個(gè)值,以24%的類比特的方法,每個(gè)類實(shí)例變量和大小(單伊娃)。最后,過時(shí)NXHashTable和NXMapTable被限制在4十億的項(xiàng)目。字符串編碼: 所有的char *
運(yùn)行時(shí)API中,應(yīng)考慮到有UTF-8編碼。
<code>“棄用”的意思是“過時(shí)的OS X 10.5版本的32位代碼,并禁止用于64位代碼?!?lt;/code>
誰應(yīng)閱讀本文件
該文件的目的是為讀者誰可能有興趣學(xué)習(xí)的Objective-C的運(yùn)行時(shí)。
因?yàn)檫@不是一個(gè)關(guān)于C文件,它假定了一些以前的熟人與該語言。然而,它并不必須是一個(gè)廣泛的熟人。
職能任務(wù)
使用類
class_getName
class_getMethodImplementation_stret
class_setSuperclass
已過時(shí)的OS X V10.5
類的實(shí)例化
class_createInstance
用工作實(shí)例
object_copy
獲取類定義
objc_getClassList
使用實(shí)例變量工作
ivar_getName
聯(lián)想?yún)⒖?br> objc_setAssociatedObject
發(fā)送消息
當(dāng)它遇到一個(gè)方法調(diào)用時(shí),編譯器可能會(huì)生成調(diào)用任意幾個(gè)函數(shù)來執(zhí)行實(shí)際的消息調(diào)度,根據(jù)不同的接收器,返回值和參數(shù)。您可以使用這些功能來動(dòng)態(tài)地從你自己的純C代碼中調(diào)用方法,或者使用不NSObject的公司允許說法的形式進(jìn)行......
方法。這些函數(shù)在聲明/usr/include/objc/objc-runtime.h
。
objc_msgSend
發(fā)送一個(gè)消息,一個(gè)簡單的返回值的類的實(shí)例。
objc_msgSend_stret
發(fā)送與數(shù)據(jù)結(jié)構(gòu)返回值的消息,一個(gè)類的實(shí)例。
objc_msgSendSuper
發(fā)送一個(gè)消息,一個(gè)簡單的返回值的類的實(shí)例的超類。
objc_msgSendSuper_stret
發(fā)送消息與數(shù)據(jù)結(jié)構(gòu)返回值的類的實(shí)例的超類。
與工作方法
method_invoke
method_exchangeImplementations
與選擇器的工作
sel_getName
與合作協(xié)議
objc_getProtocol
protocol_copyMethodDescriptionList
與工作性質(zhì)
property_getName
使用Objective-C語言特征
objc_enumerationMutation
objc_setEnumerationMutationHandler
功能
class_addIvar
增加了一個(gè)新的實(shí)例變量的類。
布爾class_addIvar(CLS級(jí),為const char *的名字,為size_t大小,uint8_t有調(diào)整,為const char *類型)
返回值
是的
,如果實(shí)例變量添加成功,否則NO
(例如,類已經(jīng)包含了該名稱的實(shí)例變量)。
討論
此功能可能僅在被稱為objc_allocateClassPair
之前objc_registerClassPair
。添加一個(gè)實(shí)例變量到一個(gè)已經(jīng)存在的類不支持。
這個(gè)類不能是元類。添加一個(gè)實(shí)例變量來元類不支持。
以字節(jié)為單位的實(shí)例變量的最小對(duì)齊是1 <<對(duì)齊
。一個(gè)實(shí)例變量的最小對(duì)齊取決于伊娃的類型和機(jī)器架構(gòu)。對(duì)于任何指針類型的變量,通過LOG2(sizeof運(yùn)算(POINTER_TYPE))
。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
class_addMethod
增加了一個(gè)新的方法,一類具有給定名稱和實(shí)施。
布爾class_addMethod(CLS級(jí),SEL名,IMP IMP,為const char *類型)
參數(shù)
CLS
類要添加的方法。
名
一個(gè)選擇器,用于指定方法的名稱被添加。
IMP
的函數(shù),而新方法的實(shí)現(xiàn)。該函數(shù)必須至少有兩個(gè)arguments- 自我
和_cmd
。
類型
描述的參數(shù)的類型的方法,字符數(shù)組。對(duì)于可能的值,看Objective-C的運(yùn)行時(shí)編程指南 > “輸入編碼”。因?yàn)樵摵瘮?shù)必須至少有兩個(gè)arguments- 自我
和_cmd
,第二和第三個(gè)字符必須是“ @
“ (第一個(gè)字符是返回類型)。
返回值
是的
,如果該方法成功地添加,否則NO
(例如,類已經(jīng)包含了一個(gè)方法實(shí)現(xiàn)了這個(gè)名字)。
討論
class_addMethod
將添加一個(gè)超類的實(shí)現(xiàn)的覆蓋,但不會(huì)取代此類現(xiàn)有的實(shí)現(xiàn)。要更改現(xiàn)有的實(shí)現(xiàn),使用method_setImplementation
。
一個(gè)Objective-C的方法是一個(gè)簡單的C函數(shù)需要至少兩個(gè)arguments- 自我
和_cmd
。例如,考慮下面的函數(shù):
無效myMethodIMP(ID自我,SEL _cmd)
{
//實(shí)現(xiàn)....
}
您可以動(dòng)態(tài)地將其添加到類中的方法(稱為resolveThisMethodDynamically
)所示:
class_addMethod([個(gè)體經(jīng)營類],@selector(resolveThisMethodDynamically),(IMP)myMethodIMP,“V @”);
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
class_addProperty
添加一個(gè)屬性類。
布爾class_addProperty(CLS級(jí),為const char *名,常量objc_property_attribute_t *屬性,無符號(hào)整型attributeCount)
參數(shù)
CLS
這個(gè)類進(jìn)行修改。
名
該屬性的名稱。
屬性
物業(yè)數(shù)組屬性。
attributeCount
中的屬性數(shù)目的屬性。
返回值
是的
,如果該屬性已成功添加; 否則NO
(例如,這個(gè)函數(shù)返回NO
,如果該類已經(jīng)擁有該屬性)。
空房
可在OS X v10.7及更高版本。
另請(qǐng)參閱
class_replaceProperty
宣稱
objc / runtime.h
class_addProtocol
增加了一個(gè)協(xié)議,一個(gè)類。
布爾class_addProtocol(CLS級(jí),協(xié)議*協(xié)議)
參數(shù)
CLS
這個(gè)類進(jìn)行修改。
outCount
該協(xié)議添加到CLS。
返回值
YES
如果協(xié)議被成功添加,否則編號(hào)
(例如,類已符合該協(xié)議)。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
class_conformsToProtocol
返回一個(gè)布爾值,表示一個(gè)類是否符合給定的協(xié)議。
布爾class_conformsToProtocol(CLS級(jí),協(xié)議*協(xié)議)
參數(shù)
CLS
類要檢查。
協(xié)議
的協(xié)議。
返回值
是的
,如果CLS符合協(xié)議,否則無
。
討論
你通常應(yīng)該使用NSObject的
的conformsToProtocol:
代替此功能的方法。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
class_copyIvarList
描述一個(gè)類中聲明的實(shí)例變量。
伊瓦爾·class_copyIvarList(CLS級(jí),無符號(hào)整型* outCount)
參數(shù)
CLS
該類檢查。
outCount
在返回時(shí),包含了返回的數(shù)組的長度。如果outCount是空
,是不是返回的長度。
返回值
伊瓦類型的指針,描述了類聲明的實(shí)例變量的數(shù)組。由超聲明的實(shí)例變量不包括在內(nèi)。該數(shù)組包含* outCount
指針后跟一個(gè)空
終止符。您必須釋放與陣列免費(fèi)的()
。
如果類沒有聲明實(shí)例變量,或者CLS
是零
,NULL,
則返回和* outCount
為0
。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
class_copyMethodList
描述了一個(gè)類實(shí)現(xiàn)的實(shí)例方法。
方法* class_copyMethodList(CLS級(jí),無符號(hào)整型* outCount)
參數(shù)
CLS
類要檢查。
outCount
在返回時(shí),包含了返回的數(shù)組的長度。如果outCount是空
,是不是返回的長度。
返回值
類型的指針數(shù)組的方法
不包含說明通過超類實(shí)現(xiàn)的類的任何實(shí)例方法實(shí)現(xiàn)的實(shí)例方法。該數(shù)組包含* outCount
指針后跟一個(gè)空
終止符。您必須釋放與陣列免費(fèi)的()
。
如果CLS沒有實(shí)現(xiàn)的實(shí)例方法,或者CLS是零
,則返回空值
和* outCount
為0
。
討論
為了得到一個(gè)類的類的方法,使用class_copyMethodList(object_getClass(CLS),及計(jì)數(shù))
。
要獲取方法的實(shí)現(xiàn),可以通過父類來實(shí)現(xiàn),使用class_getInstanceMethod
或class_getClassMethod
。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
class_copyPropertyList
描述一個(gè)類中聲明的屬性。
objc_property_t * class_copyPropertyList(CLS級(jí),無符號(hào)整型* outCount)
參數(shù)
CLS
類要檢查。
outCount
在返回時(shí),包含了返回的數(shù)組的長度。如果outCount是空
,是不是返回的長度。
返回值
類型的指針數(shù)組objc_property_t
描述的類聲明的屬性。不包括超類中聲明的所有屬性。該數(shù)組包含* outCount
指針后跟一個(gè)空
終止符。您必須釋放與陣列免費(fèi)的()
。
如果CLS聲明沒有屬性,或者CLS是零
,則返回空值
和* outCount
為0
。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
class_copyProtocolList
描述了通過一個(gè)類的協(xié)議。
協(xié)議** class_copyProtocolList(CLS級(jí),無符號(hào)整型* outCount)
參數(shù)
CLS
類要檢查。
outCount
在返回時(shí),包含了返回的數(shù)組的長度。如果outCount是空
,是不是返回的長度。
返回值
類型的指針數(shù)組協(xié)議*
說明通過類的協(xié)議。采用超或其他協(xié)議的任何協(xié)議不包括在內(nèi)。該數(shù)組包含* outCount
指針后跟一個(gè)空
終止符。您必須釋放與陣列免費(fèi)的()
。
如果CLS采用無協(xié)議或CLS是零
,則返回空值
和* outCount
為0
。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
class_createInstance
創(chuàng)建一個(gè)類的實(shí)例,這個(gè)類在默認(rèn)的malloc內(nèi)存區(qū)分配內(nèi)存。
ID class_createInstance(CLS級(jí),為size_t extraBytes)
參數(shù)
CLS
要分配的一個(gè)實(shí)例的類。
extraBytes
一個(gè)整數(shù),指示的額外字節(jié)數(shù)來分配。中的附加字節(jié)可以被用于存儲(chǔ)以外的類定義中所定義的附加的實(shí)例變量。
返回值
這個(gè)類的一個(gè)實(shí)例CLS。
空房
可在OS X 10.0版和更高版本。
另請(qǐng)參閱
objc_constructInstance
宣稱
objc / runtime.h
class_getClassMethod
返回一個(gè)指針,指向的數(shù)據(jù)結(jié)構(gòu)描述為一個(gè)給定的類指定類方法。
方法class_getClassMethod(類類的一個(gè),SEL aSelector)
參數(shù)
ACLASS
一個(gè)指針,指向一個(gè)類定義。通過包含您要檢索的方法的類。
aSelector
類型的指針SEL
。傳給你要檢索的方法的選擇。
返回值
一個(gè)指針,指向的方法
對(duì)應(yīng)于由指定的選擇器的實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)aSelector由指定的類類的一個(gè)或NULL,
如果指定的類或者它的超類不包含的類的方法用指定的選擇。
討論
請(qǐng)注意,此功能搜索超供實(shí)現(xiàn),而class_copyMethodList
沒有。
空房
可在OS X 10.0版和更高版本。
宣稱
objc / runtime.h
class_getClassVariable
返回伊瓦爾
對(duì)于給定的類的指定類變量。
伊瓦爾class_getClassVariable(CLS級(jí),為const char *名)
參數(shù)
CLS
類定義的類變量,你希望獲得。
名
來獲得類的變量定義的名稱。
返回值
一個(gè)指針,指向一個(gè)伊瓦爾
包含有關(guān)所指定的類變量信息的數(shù)據(jù)結(jié)構(gòu)的名稱
。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
class_getImageName
返回動(dòng)態(tài)庫中的類源自的名稱。
為const char * class_getImageName(CLS級(jí))
參數(shù)
CLS
您詢問的類。
返回值
C字符串表示包含該庫的名稱CLS級(jí)。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
class_getInstanceMethod
返回指定實(shí)例方法對(duì)于給定的類。
方法class_getInstanceMethod(類類的一個(gè),SEL aSelector)
參數(shù)
ACLASS
類要檢查。
aSelector
要檢索的方法的選擇。
返回值
對(duì)應(yīng)于由指定的選擇器的實(shí)現(xiàn)方法aSelector由指定的類類的一個(gè)或NULL,
如果指定的類或者它的超類不包含的實(shí)例方法使用指定的選擇。
討論
請(qǐng)注意,此功能搜索超供實(shí)現(xiàn),而class_copyMethodList
沒有。
空房
可在OS X 10.0版和更高版本。
宣稱
objc / runtime.h
class_getInstanceSize
返回一個(gè)類的實(shí)例的大小。
為size_t class_getInstanceSize(CLS級(jí))
參數(shù)
CLS
一個(gè)Class對(duì)象。
返回值
在類的實(shí)例的字節(jié)大小CLS,或者0
,如果CLS是零
。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
class_getInstanceVariable
返回伊瓦爾
對(duì)于給定的類的指定實(shí)例變量。
伊瓦爾class_getInstanceVariable(CLS級(jí),為const char *名)
參數(shù)
CLS
這個(gè)類的實(shí)例變量,你希望獲得。
名
獲取實(shí)例變量定義的名稱。
返回值
一個(gè)指針,指向一個(gè)伊瓦爾
包含有關(guān)被指定的實(shí)例變量信息的數(shù)據(jù)結(jié)構(gòu)的名稱
。
空房
可在OS X 10.0版和更高版本。
宣稱
objc / runtime.h
class_getIvarLayout
返回的描述伊瓦爾
布局對(duì)于一個(gè)給定的類。
為const char * class_getIvarLayout(CLS級(jí))
參數(shù)
CLS
該類檢查。
返回值
的描述伊瓦
布局CLS。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
class_getMethodImplementation
返回的函數(shù)指針,如果一個(gè)特定的消息被發(fā)送到一個(gè)類的實(shí)例,將被調(diào)用。
進(jìn)出口class_getMethodImplementation(CLS級(jí),SEL名)
參數(shù)
CLS
類要檢查。
名
一個(gè)選擇。
返回值
函數(shù)指針,如果那被稱為[對(duì)象名稱]
被稱為與類的實(shí)例,或者為NULL
,如果CLS是零
。
討論
class_getMethodImplementation
可能比快method_getImplementation(class_getInstanceMethod(CLS,名稱))
。
返回的函數(shù)指針可能是內(nèi)部的運(yùn)行,而不是一個(gè)實(shí)際的方法實(shí)現(xiàn)的功能。例如,如果該類的實(shí)例不來選擇響應(yīng),返回的函數(shù)指針將是運(yùn)行時(shí)的消息轉(zhuǎn)發(fā)機(jī)制的一部分。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
class_getMethodImplementation_stret
返回的函數(shù)指針,如果一個(gè)特定的消息被發(fā)送到一個(gè)類的實(shí)例,將被調(diào)用。
進(jìn)出口class_getMethodImplementation_stret(CLS級(jí),SEL名)
參數(shù)
CLS
類要檢查。
名
一個(gè)選擇。
返回值
函數(shù)指針,如果那被稱為[對(duì)象名稱]
被稱為與類的實(shí)例,或者為NULL
,如果CLS是零
。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
class_getName
返回類的名稱。
為const char * class_getName(CLS級(jí))
參數(shù)
CLS
一個(gè)Class對(duì)象。
返回值
類的名稱,或者空字符串CLS是零
。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
class_getProperty
返回與給定類的給定名稱的屬性。
objc_property_t class_getProperty(CLS級(jí),為const char 名)
返回值
類型的指針objc_property_t
描述性,或空
,如果類沒有使用該名稱,或者聲明一個(gè)屬性為NULL
,如果CLS*是零
。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
class_getSuperclass
返回一個(gè)類的父類。
類class_getSuperclass(CLS級(jí))
參數(shù)
CLS
一個(gè)Class對(duì)象。
返回值
該類的超類,或無
,如果CLS是根類,或無
,如果CLS是零
。
討論
你通常應(yīng)該使用NSObject的
的超類
來代替這一功能的方法。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
class_getVersion
返回一個(gè)類定義的版本號(hào)。
INT class_getVersion(類theClass描述)
參數(shù)
theClass描述
一個(gè)指針,指向一個(gè)類
的數(shù)據(jù)結(jié)構(gòu)。通過對(duì)您想要獲取版本的類的定義。
返回值
的整數(shù),指示在類定義的版本號(hào)。
討論
您可以使用類定義的版本號(hào)為您的類代表其他類接口的版本。這是用于對(duì)象序列特別有用(即,在一個(gè)扁平的形式的對(duì)象的歸檔),在那里它的變化認(rèn)識(shí)到在不同的類定義版本的實(shí)例變量的布局是非常重要的。
從基礎(chǔ)架構(gòu)派生類NSObject的
類可以獲取使用的類定義版本號(hào)的getVersion
類方法,它是利用實(shí)施class_getVersion
功能。
空房
可在OS X 10.0版和更高版本。
宣稱
objc / runtime.h
class_getWeakIvarLayout
返回弱布局的描述伊瓦爾
為了一個(gè)給定的類。
為const char * class_getWeakIvarLayout(CLS級(jí))
參數(shù)
CLS
該類檢查。
返回值
弱布局的描述伊瓦
S代表CLS。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
class_isMetaClass
返回一個(gè)布爾值,表示一個(gè)類對(duì)象是否是一個(gè)元類。
布爾class_isMetaClass(CLS級(jí))
參數(shù)
CLS
一個(gè)Class對(duì)象。
返回值
是的
,如果CLS是一個(gè)元類,NO
,如果CLS是一種非Meta類,NO
,如果CLS是零
。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
class_replaceMethod
替換為一個(gè)給定的類中的方法的實(shí)現(xiàn)。
進(jìn)出口class_replaceMethod(CLS級(jí),SEL名,IMP IMP,為const char *類型)
參數(shù)
CLS
類要修改。
名
選擇器是標(biāo)識(shí)要替換它的實(shí)現(xiàn)方法。
IMP
新的實(shí)現(xiàn)對(duì)于所確定的方法名稱所標(biāo)識(shí)的類CLS。
類型
描述的參數(shù)的類型的方法,字符數(shù)組。對(duì)于可能的值,看Objective-C的運(yùn)行時(shí)編程指南 > “輸入編碼”。因?yàn)樵摵瘮?shù)必須至少有兩個(gè)arguments- 自我
和_cmd
,第二和第三個(gè)字符必須是“ @
“ (第一個(gè)字符是返回類型)。
返回值
以前的實(shí)現(xiàn)所確定的方法的名字所標(biāo)識(shí)的類CLS。
討論
這個(gè)函數(shù)的作用有兩種不同的方式:
如果確定該方法的名稱不存在,它被添加仿佛class_addMethod
被稱為。通過所指定的類型的編碼類型被用作給定。
如果確定了該方法的名字存在,其IMP被替換仿佛method_setImplementation
被調(diào)用。通過指定類型的編碼類型被忽略。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
class_replaceProperty
替換類的屬性。
無效class_replaceProperty(CLS級(jí),為const char *名,常量objc_property_attribute_t *屬性,無符號(hào)整型attributeCount)
參數(shù)
CLS
這個(gè)類進(jìn)行修改。
名
該屬性的名稱。
屬性
物業(yè)數(shù)組屬性。
attributeCount
中的屬性數(shù)目的屬性。
空房
可在OS X v10.7及更高版本。
另請(qǐng)參閱
class_addProperty
宣稱
objc / runtime.h
class_respondsToSelector
返回一個(gè)布爾值,表示一個(gè)類的實(shí)例是否在一個(gè)特定的選擇做出回應(yīng)。
布爾class_respondsToSelector(CLS級(jí),SEL SEL)
參數(shù)
CLS
類要檢查。
SEL
一個(gè)選擇。
返回值
是的
,如果該類的實(shí)例響應(yīng)選擇,否則無
。
討論
你通常應(yīng)該使用NSObject的
的respondsToSelector:
或instancesRespondToSelector:
方法代替此功能。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
class_setIvarLayout
設(shè)置伊瓦爾
對(duì)于一個(gè)給定的類布局。
無效class_setIvarLayout(CLS級(jí),為const char *布局)
參數(shù)
CLS
這個(gè)類進(jìn)行修改。
布局
的布局伊瓦
S代表CLS。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
class_setVersion
設(shè)置一個(gè)類定義的版本號(hào)。
無效class_setVersion(類theClass描述,詮釋的版本)
參數(shù)
theClass描述
一個(gè)指針,指向一個(gè)類
的數(shù)據(jù)結(jié)構(gòu)。通過要為其設(shè)置版本的類的定義。
版本
一個(gè)整數(shù)。通過類定義的新的版本號(hào)。
討論
您可以使用類定義的版本號(hào)為您的類代表其他類接口的版本。這是用于對(duì)象序列特別有用(即,在一個(gè)扁平的形式的對(duì)象的歸檔),在那里它的變化認(rèn)識(shí)到在不同的類定義版本的實(shí)例變量的布局是非常重要的。
從基礎(chǔ)架構(gòu)派生類NSObject的
類可以使用設(shè)置類定義的版本號(hào)setVersion中:
類方法,它是利用實(shí)施class_setVersion
功能。
空房
可在OS X 10.0版和更高版本。
宣稱
objc / runtime.h
class_setWeakIvarLayout
設(shè)置為弱的布局伊瓦爾
為了一個(gè)給定的類。
無效class_setWeakIvarLayout(CLS級(jí),為const char *布局)
參數(shù)
CLS
這個(gè)類進(jìn)行修改。
布局
弱布局伊娃
S代表CLS。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
imp_getBlock
返回與相關(guān)的塊IMP
使用創(chuàng)建的imp_implementationWithBlock
。
ID imp_getBlock(IMP anImp)
參數(shù)
anImp
該公司
調(diào)用該塊。
返回值
調(diào)用塊anImp。
空房
可在OS X v10.7及更高版本。
另請(qǐng)參閱
imp_implementationWithBlock
宣稱
objc / runtime.h
imp_implementationWithBlock
創(chuàng)建一個(gè)指向函數(shù)的指針調(diào)用時(shí)調(diào)用該方法的指定塊。
進(jìn)出口imp_implementationWithBlock(ID塊)
參數(shù)
塊
實(shí)現(xiàn)此方法的程序段。簽名塊應(yīng)method_return_type ^(ID自我,自我,method_args ...)
。該方法的選擇是不提供給方框。塊被復(fù)制與Block_copy()
。
返回值
該公司
調(diào)用塊。你必須處理返回的進(jìn)出口
使用的功能。
空房
可在OS X v10.7及更高版本。
另請(qǐng)參閱
imp_getBlock
宣稱
objc / runtime.h
imp_removeBlock
解除關(guān)聯(lián)從一個(gè)塊IMP
使用創(chuàng)建的imp_implementationWithBlock
,并釋放所創(chuàng)建的塊的副本。
布爾imp_removeBlock(IMP anImp)
參數(shù)
anImp
一個(gè)IMP
使用創(chuàng)建的imp_implementationWithBlock
功能。
返回值
是的
,如果該塊被成功釋放; 否則,編號(hào)
(例如,該函數(shù)返回NO
如果塊沒有被用來創(chuàng)建anImp以前)。
空房
可在OS X v10.7及更高版本。
另請(qǐng)參閱
imp_implementationWithBlock
宣稱
objc / runtime.h
ivar_getName
返回一個(gè)實(shí)例變量的名稱。
為const char * ivar_getName(伊娃伊娃)
返回值
C字符串包含實(shí)例變量的名字。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
ivar_getOffset
實(shí)例變量返回的偏移量。
ptrdiff_t的ivar_getOffset(伊娃伊娃)
討論
對(duì)于類型的實(shí)例變量標(biāo)識(shí)
或其他對(duì)象的類型,調(diào)用object_getIvar
和object_setIvar
使用該偏移量來直接訪問該實(shí)例變量的數(shù)據(jù)來代替。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
ivar_getTypeEncoding
返回一個(gè)實(shí)例變量的類型的字符串。
為const char * ivar_getTypeEncoding(伊娃伊娃)
返回值
C字符串包含實(shí)例變量的類型編碼。
討論
對(duì)于可能的值,看Objective-C的運(yùn)行時(shí)編程指南 > “輸入編碼”。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
method_copyArgumentType
返回描述方法的一個(gè)參數(shù)類型的字符串。
char *的method_copyArgumentType(方法方法,無符號(hào)整型指數(shù))
參數(shù)
方法
該方法檢查。
指數(shù)
該參數(shù)的索引進(jìn)行檢查。
返回值
C字符串描述參數(shù)的索引類型索引,或者為NULL
,如果方法沒有參數(shù)指標(biāo)指數(shù)。您必須釋放字符串免費(fèi)的()
。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
method_copyReturnType
返回描述方法的返回類型的字符串。
char *的method_copyReturnType(法法)
參數(shù)
方法
該方法檢查。
返回值
C字符串描述返回類型。您必須釋放字符串免費(fèi)的()
。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
method_exchangeImplementations
交流兩種方法的實(shí)現(xiàn)。
無效method_exchangeImplementations(方法M1,M2的方法)
討論
這是下面的一個(gè)原子的版本:
進(jìn)出口IMP1 = method_getImplementation(M1);
進(jìn)出口IMP2 = method_getImplementation(M2);
method_setImplementation(M1,IMP2);
method_setImplementation(M2,IMP1);
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
method_getArgumentType
返回參照描述方法的一個(gè)參數(shù)類型的字符串。
無效method_getArgumentType(方法方法,unsigned int類型的索引,char 的DST,為size_t dst_len)
討論
參數(shù)類型的字符串復(fù)制到DST,DST充滿仿佛函數(shù)strncpy(DST,parameter_type,dst_len)
被調(diào)用。如果該方法包含與該指數(shù)沒有參數(shù),DST*充滿仿佛函數(shù)strncpy(DST,“”,dst_len)
被調(diào)用。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
method_getDescription
返回的方法描述結(jié)構(gòu)的特定方法。
結(jié)構(gòu)objc_method_description * method_getDescription(方法M)
參數(shù)
米
該方法要打聽。
返回值
一個(gè)objc_method_description
結(jié)構(gòu),描述根據(jù)指定的方法米。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
method_getImplementation
返回一個(gè)方法的實(shí)現(xiàn)。
進(jìn)出口method_getImplementation(法法)
參數(shù)
方法
該方法檢查。
返回值
類型的函數(shù)指針進(jìn)出口
。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
method_getName
返回一個(gè)方法的名稱。
SEL method_getName(法法)
參數(shù)
方法
該方法檢查。
返回值
SEL類型的指針。
討論
要獲取方法的名稱為C字符串,調(diào)用sel_getName(method_getName(法))
。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
method_getNumberOfArguments
返回由法接受的參數(shù)的個(gè)數(shù)。
無符號(hào)method_getNumberOfArguments(法法)
參數(shù)
方法
一個(gè)指向方法
的數(shù)據(jù)結(jié)構(gòu)。通過有問題的方法。
返回值
包含由給定的方法接受的參數(shù)數(shù)量的整數(shù)。
空房
可在OS X 10.0版和更高版本。
宣稱
objc / runtime.h
method_getReturnType
通過引用返回一個(gè)描述方法的返回類型的字符串。
無效method_getReturnType(方法方法,char 的DST,為size_t dst_len)
討論
該方法的返回類型為字符串復(fù)制到夏令時(shí),夏令時(shí)*是充滿仿佛函數(shù)strncpy(DST,parameter_type,dst_len)
被調(diào)用。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
method_getTypeEncoding
返回描述方法的參數(shù)和返回類型的字符串。
為const char * method_getTypeEncoding(法法)
參數(shù)
方法
該方法檢查。
返回值
C字符串。該字符串可以是NULL
。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
method_invoke
調(diào)用指定的方法的實(shí)現(xiàn)。
ID method_invoke(ID接收器,法米,...)
參數(shù)
接收器
一個(gè)指針,指向要調(diào)用的方法的類的實(shí)例。這個(gè)值不能為零
。
米
該方法要調(diào)用它的實(shí)現(xiàn)。
......
可變參數(shù)列表包含參數(shù)的方法。
返回值
該方法的返回值。
討論
使用此功能來調(diào)用一個(gè)方法的實(shí)現(xiàn)比調(diào)用更快method_getImplementation
和method_getName
。
空房
可在OS X V10.5及更高版本。
宣稱
objc / message.h
method_invoke_stret
調(diào)用指定的方法,返回一個(gè)數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)。
無效method_invoke_stret(ID接收器,法米,...)
參數(shù)
接收器
一個(gè)指針,指向要調(diào)用的方法的類的實(shí)例。這個(gè)值不能為零
。
米
該方法要調(diào)用它的實(shí)現(xiàn)。
......
可變參數(shù)列表包含參數(shù)的方法。
討論
使用此功能來調(diào)用一個(gè)方法的實(shí)現(xiàn)比調(diào)用更快method_getImplementation
和method_getName
。
空房
可在OS X V10.5及更高版本。
宣稱
objc / message.h
method_setImplementation
設(shè)置一個(gè)方法的實(shí)現(xiàn)。
進(jìn)出口method_setImplementation(方法方法,IMP IMP)
返回值
以前的實(shí)施方法。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
objc_allocateClassPair
創(chuàng)建一個(gè)新的類和元類。
objc_allocateClassPair(父類,為const char *名,為size_t extraBytes)
參數(shù)
超
類為新類的超類使用,或無
以創(chuàng)建一個(gè)新的根類。
名
將字符串作為新的類的名稱使用。該字符串將被復(fù)制。
extraBytes
的字節(jié)數(shù)來分配的索引實(shí)例變量在類與元類對(duì)象的結(jié)束。這通常應(yīng)為0
。
返回值
新的類,或者無
如果不能創(chuàng)建的類(例如,所需的名稱已被使用)。
討論
你可以通過調(diào)用得到一個(gè)指向新的元類object_getClass(的NewClass)
。
要?jiǎng)?chuàng)建一個(gè)新的類,通 ??過調(diào)用啟動(dòng)objc_allocateClassPair
。然后設(shè)置類的屬性與像功能class_addMethod
和class_addIvar
。當(dāng)您完成建設(shè)類,調(diào)用objc_registerClassPair
。新類是現(xiàn)在可以使用了。
實(shí)例方法和實(shí)例變量應(yīng)該被添加到類本身。類的方法應(yīng)該被添加到元類。
空房
可在OS X V10.5及更高版本。
另請(qǐng)參閱
objc_disposeClassPair
宣稱
objc / runtime.h
objc_allocateProtocol
創(chuàng)建一個(gè)新的協(xié)議實(shí)例。
協(xié)議* objc_allocateProtocol(為const char *名)
參數(shù)
名
你要?jiǎng)?chuàng)建的協(xié)議的名稱。
返回值
一個(gè)新的協(xié)議實(shí)例或零
,如果使用相同的名稱作為協(xié)議的名稱已經(jīng)存在。
討論
您必須注冊(cè)到返回的協(xié)議實(shí)例objc_registerProtocol
功能,然后才能使用它。
沒有與此功能相關(guān)聯(lián)的dispose方法。
空房
可在OS X v10.7及更高版本。
另請(qǐng)參閱
objc_registerProtocol
宣稱
objc / runtime.h
objc_constructInstance
在指定位置創(chuàng)建一個(gè)類的實(shí)例。
ID objc_constructInstance(CLS級(jí),無效*字節(jié))
參數(shù)
CLS
要分配的一個(gè)實(shí)例的類。
字節(jié)
在該分配的實(shí)例的位置CLS級(jí)。字節(jié)神秘島點(diǎn)至少class_getInstanceSize(CLS)
以及對(duì)齊,零填充的內(nèi)存字節(jié)。
返回值
這個(gè)類的一個(gè)實(shí)例CLS的字節(jié)數(shù),如果成功; 否則為零
(例如,如果CLS或字節(jié)本身是零
)。
空房
可在OS X v10.6中及更高版本。
另請(qǐng)參閱
class_createInstance
宣稱
objc / runtime.h
objc_copyClassList
創(chuàng)建并返回指向所有注冊(cè)類定義的列表。
類* objc_copyClassList(無符號(hào)整數(shù)* outCount)
參數(shù)
outCount
一個(gè)整數(shù)的指針,用來存儲(chǔ)在列表中該函數(shù)返回類的數(shù)量。此參數(shù)可以是零
。
返回值
á 無
終止的類數(shù)組。您必須釋放與陣列免費(fèi)的()
。
空房
可在OS X v10.7及更高版本。
另請(qǐng)參閱
objc_getClassList
宣稱
objc / runtime.h
objc_copyClassNamesForImage
返回在指定庫或框架的所有類的名稱。
為const char ** objc_copyClassNamesForImage(為const char 的圖像,無符號(hào)整型 outCount)
參數(shù)
圖片
庫或框架,你打聽。
outCount
返回的數(shù)組中的類名的數(shù)量。
返回值
C字符串代表了所有指定的庫或框架中的類名數(shù)組。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
objc_copyImageNames
返回所有已加載的Objective-C框架和動(dòng)態(tài)庫的名字。
為const char ** objc_copyImageNames(無符號(hào)整數(shù)* outCount)
參數(shù)
outCount
返回的數(shù)組中人名的數(shù)目。
返回值
C字符串表示所有已加載的Objective-C框架和動(dòng)態(tài)庫的名稱的數(shù)組。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
objc_copyProtocolList
返回所有已知的運(yùn)行協(xié)議的數(shù)組。
協(xié)議** objc_copyProtocolList(無符號(hào)整數(shù)* outCount)
參數(shù)
outCount
返回時(shí),包含返回的數(shù)組中的協(xié)議數(shù)量。
返回值
交流陣列中所有已知的運(yùn)行時(shí)的協(xié)議。該數(shù)組包含* outCount
指針后跟一個(gè)空
終止符。您必須釋放列表免費(fèi)的()
。
討論
這個(gè)函數(shù)獲取運(yùn)行時(shí)鎖定。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
objc_destructInstance
銷毀一個(gè)類的實(shí)例沒有釋放內(nèi)存,并刪除任何相關(guān)參考資料。
無效objc_destructInstance(ID OBJ)
討論
此方法不執(zhí)行任何操作,如果OBJ是零
。
重要提示: 在垃圾回收器不會(huì)調(diào)用這個(gè)函數(shù)。因此,如果你編輯這個(gè)功能,你應(yīng)該也可以編輯完成。也就是說,核心基金及其他客戶做的叫垃圾收集下此功能。
空房
可在OS X v10.6中及更高版本。
另請(qǐng)參閱
objc_constructInstance
宣稱
objc / runtime.h
objc_disposeClassPair
破壞類及其相關(guān)的元類。
無效objc_disposeClassPair(CLS級(jí))
參數(shù)
CLS
該類被破壞。這個(gè)類必須已經(jīng)使用分配objc_allocateClassPair
。
討論
不要調(diào)用這個(gè)函數(shù),如果實(shí)例CLS存在的類或任何子類。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
objc_duplicateClass
用基金會(huì)的鍵 - 值觀察。
objc_duplicateClass
特別注意事項(xiàng)
不要自己調(diào)用這個(gè)函數(shù)。
空房
可在OS X V10.5及更高版本。
宣稱
objc / runtime.h
objc_enumerationMutation
通過在一個(gè)foreach循環(huán)中檢測到突變的編譯器插入。
無效objc_enumerationMutation(ID OBJ)
參數(shù)
OBJ
對(duì)象被突變。
討論
編譯器插入此功能檢測到的對(duì)象是一個(gè)foreach迭代過程中發(fā)生突變的時(shí)候。當(dāng)變異發(fā)生在函數(shù)被調(diào)用,如果它被設(shè)置(通過枚舉突變處理程序制定objc_setEnumerationMutationHandler
功能)。如果處理器沒有建立起來,出現(xiàn)致命錯(cuò)誤。
空房
可在OS X V10.5及更高版本。
另請(qǐng)參閱
objc_setEnumerationMutationHandler
宣稱
objc / runtime.h