转自: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运算,...)