Objective-C Runtime官放文档翻译二

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运算,...)
参数

一个指针,指向类的要接收消息的实例。

OP
在处理该信息的方法的选择。

......
可变参数列表包含参数的方法。

返回值
该方法的返回值。

讨论
当它遇到一个方法调用时,编译器会生成调用的功能之一objc_msgSend
objc_msgSend_stret
objc_msgSendSuper
objc_msgSendSuper_stret
。发送到对象的超类的消息(使用超
关键字)使用的是发送objc_msgSendSuper
; 其他消息使用发送objc_msgSend
。有数据结构作为返回值的方法是使用发送objc_msgSendSuper_stret
和objc_msgSend_stret

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

宣称
objc / message.h

objc_msgSendSuper
发送一个消息,一个简单的返回值的类的实例的超类。
ID objc_msgSendSuper(结构objc_super *超,SEL运算,...)
参数

一个指针,指向一个objc_super
数据结构。传递值确定邮件发送给包括要接收消息和超在其开始搜索的方法实现的类的实例的上下文。

OP
类型的指针SEL
。通过将处理该信息的方法的选择。

......
可变参数列表包含参数的方法。

返回值
确定了该方法的返回值的运算

讨论
当它遇到一个方法调用时,编译器会生成调用的功能之一objc_msgSend
objc_msgSend_stret
objc_msgSendSuper
objc_msgSendSuper_stret
。发送到对象的超类的消息(使用超
关键字)使用的是发送objc_msgSendSuper
; 其他消息使用发送objc_msgSend
。有数据结构作为返回值的方法是使用发送objc_msgSendSuper_stret
和objc_msgSend_stret

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

宣称
objc / message.h

objc_msgSendSuper_stret
发送消息与数据结构返回值的类的实例的超类。
无效objc_msgSendSuper_stret(结构objc_super *超,SEL运算,...)
参数

一个指针,指向一个objc_super
数据结构。传递值确定邮件发送给包括要接收消息和超在其开始搜索的方法实现的类的实例的上下文。

OP
类型的指针SEL
。通过该方法的选择。

......
可变参数列表包含参数的方法。

讨论
当它遇到一个方法调用时,编译器会生成调用的功能之一objc_msgSend
objc_msgSend_stret
objc_msgSendSuper
objc_msgSendSuper_stret
。发送到对象的超类的消息(使用超
关键字)使用的是发送objc_msgSendSuper
; 其他消息使用发送objc_msgSend
。有数据结构作为返回值的方法是使用发送objc_msgSendSuper_stret
和objc_msgSend_stret

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

宣称
objc / message.h

objc_msgSend_fpret
发送消息浮点返回值的类的实例。
双objc_msgSend_fpret(ID自我,SEL运算,...)
参数

一个指针,指向类的要接收消息的实例。

OP
在处理该信息的方法的选择。

......
可变参数列表包含参数的方法。

讨论
在i386平台,ABI的功能为返回一个浮点数值与对函数返回一个整数类型不兼容。在i386平台,因此,您必须使用objc_msgSend_fpret
的功能,对于函数返回非整数类型。对于浮动
或长双
返回类型,施放功能,适当的函数指针类型第一。
这个功能没有被使用在PPC或PPC64平台。

空房
可在OS X 10.4及更高版本。

宣称
objc / message.h

objc_msgSend_stret
发送一个数据结构,返回值的消息,一个类的实例。
无效objc_msgSend_stret(void *的stretAddr,ID theReceiver,SEL theSelector,...)
参数
stretAddr
在输入时,指针指向的内存足够大,以包含该方法的返回值的块。在输出时,包含该方法的返回值。

theReceiver
一个指针,指向类的实例,它是接收消息。

theSelector
类型的指针SEL
。通过处理该信息的方法的选择。

......
可变参数列表包含参数的方法。

讨论
当它遇到一个方法调用时,编译器会生成调用的功能之一objc_msgSend
objc_msgSend_stret
objc_msgSendSuper
objc_msgSendSuper_stret
。发送到对象的超类的消息(使用超
关键字)使用的是发送objc_msgSendSuper
; 其他消息使用发送objc_msgSend
。有数据结构作为返回值的方法是使用发送objc_msgSendSuper_stret
和objc_msgSend_stret

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

宣称
objc / message.h

objc_registerClassPair
寄存器,使用分配的一类objc_allocateClassPair

无效objc_registerClassPair(CLS级)
参数
CLS
类要注册。

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

宣称
objc / runtime.h

objc_registerProtocol
注册一个与Objective-C运行新创建的协议。
无效objc_registerProtocol(协议*原)
参数

该协议要与Objective-C的运行时进行登记。

讨论
当您创建使用一个新的协议objc_allocateProtocol
,然后,通过调用这个函数的Objective-C的运行时注册它。经过协议成功注册,这是不可改变的,并准备使用。

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

另请参阅
objc_allocateProtocol

宣称
objc / runtime.h

objc_removeAssociatedObjects
删除给定对象的所有关联。
无效objc_removeAssociatedObjects(ID对象)
参数
对象
它维护相关联的对象的对象。

讨论
此功能的主要目的是可以很容易将对象返回到“原始状态”,你不应该使用这个函数从对象一般去除关联,因为它也消除了其他客户可能已添加到该对象关联。通常情况下,你应该使用objc_setAssociatedObject
与零
值,以清除关联。

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

另请参阅
objc_setAssociatedObject

objc_getAssociatedObject

宣称
objc / runtime.h

objc_setAssociatedObject
设置使用给定的键和关联政策给定对象关联的值。
无效objc_setAssociatedObject(ID对象,空白*键,值id,objc_AssociationPolicy政策)
参数
对象
源对象的关联。

关键
密钥对的关联。


该值与密钥相关联的密钥目的。通过以清除现有的关联。

政策
该政策的相关性。对于可能的值,请参阅“关联对象的行为。”

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

另请参阅
objc_setAssociatedObject

objc_removeAssociatedObjects

宣称
objc / runtime.h

objc_setEnumerationMutationHandler
设置电流突变处理。
无效objc_setEnumerationMutationHandler(无效(*处理器)(ID))
参数
处理程序
函数指针到新的变异处理程序。

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

宣称
objc / runtime.h

objc_setFutureClass
使用CoreFoundation的免费桥接。
无效objc_setFutureClass(CLS级,为const char *名)
特别注意事项
不要自己调用这个函数。

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

宣称
objc / runtime.h

objc_storeWeak
存储在一个新值__weak
变量。
ID objc_storeWeak(ID *的位置,ID OBJ)
参数
位置
弱指针的地址。

OBJ
新的对象,你要弱指针现在指向。

返回值
存储在所述值的位置(即,物镜)。

讨论
此功能通常用于任何地方__weak
变量赋值的目标。

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

宣称
objc / runtime.h

object_copy
返回给定对象的副本。
ID object_copy(ID OBJ,为size_t大小)
参数
OBJ
一个Objective-C的对象。

大小
对象的大小物镜

返回值
副本OBJ

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

宣称
objc / runtime.h

object_dispose
释放由给定对象占用的内存。
ID object_dispose(ID OBJ)
参数
OBJ
一个Objective-C的对象。

返回值

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

宣称
objc / runtime.h

object_getClass
返回类的对象。
类object_getClass(ID对象)
参数
对象
对象要检查。

返回值
其中的类对象对象是一个实例,或无
如果对象是零

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

宣称
objc / runtime.h

object_getClassName
返回给定对象的类名。
为const char * object_getClassName(ID OBJ)
参数
OBJ
一个Objective-C的对象。

返回值
类,其中的名称物镜是一个实例。

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

宣称
objc / runtime.h

object_getIndexedIvars
返回一个指向分配一个实例给定对象的任何额外的字节。
OBJC_EXPORT无效* object_getIndexedIvars(ID OBJ)
参数
OBJ
一个Objective-C的对象。

返回值
一个指向分配任何额外的字节OBJ。如果OBJ没有被分配任何额外的字节,然后提领返回的指针是不确定的。

讨论
这个函数返回一个指向分配该实例的任何额外的字节(具体由class_createInstance
与extraBytes> 0)。这个存储器如下物件的普通实例变量,但可能并不相邻于最后的ivar。
返回指针是保证指针尺寸对齐,即使下面的对象的最后的ivar的面积小于对准。比指针的大小对齐更大从未得到保证,即使下面的对象的最后的ivar的面积比更一致。
在垃圾收集环境中,内存扫描保守。

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

宣称
objc / objc.h

object_getInstanceVariable
获得一个类的实例的实例变量的值。
伊瓦尔object_getInstanceVariable(ID OBJ,为const char 名,空白* outValue)
参数
OBJ
一个指针,指向一个类的实例。通过含有该实例变量,其值要获取的对象。


C字符串。通过实例变量的值,你希望得到的名字。

outValue
在返回时,包含一个指向该实例变量的值。

返回值
的指针伊娃
的数据结构,它定义了指定的实例变量的类型和名称的名称

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

宣称
objc / runtime.h

object_getIvar
读一个实例变量中的对象的值。
ID object_getIvar(ID对象,伊娃伊娃)
参数
对象
包含实例变量要读取其值的对象。

伊娃
在伊瓦描述实例变量,你想读的价值。

返回值
由指定的实例变量的值伊娃,或者为零
,如果对象是零

讨论
object_getIvar
比快object_getInstanceVariable
如果已经知道伊娃的实例变量。

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

宣称
objc / runtime.h

object_setClass
设置类的对象的。
类object_setClass(ID对象,类CLS)
参数
对象
修改的对象。

SEL
一个Class对象。

返回值
以前的值对象的类,或者无
,如果对象是零

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

宣称
objc / runtime.h

object_setInstanceVariable
改变一个类的实例的实例变量的值。
伊瓦尔object_setInstanceVariable(ID OBJ,为const char *的名字,void *的值)
参数
OBJ
一个指针,指向一个类的实例。通过包含实例变量,它的值要修改的对象。


C字符串。通过实例变量,它的值要修改的名称。


对实例变量的新值。

返回值
的指针伊娃
的数据结构,它定义了指定的实例变量的类型和名称的名称

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

宣称
objc / runtime.h

object_setIvar
设置一个实例变量中的对象的值。
无效object_setIvar(ID对象,伊娃伊娃,值id)
参数
对象
包含实例变量要设置其值的对象。

伊娃
在伊瓦描述实例变量要设置其值。


对实例变量的新值。

讨论
object_setIvar
比快object_setInstanceVariable
如果已经知道伊娃的实例变量。

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

宣称
objc / runtime.h

property_copyAttributeList
返回属性的属性给定属性的数组。
objc_property_attribute_t * property_copyAttributeList(objc_property_t财产,无符号整型* outCount)
参数
物业
你要复制的属性,它的属性。

outCount
数组中返回的属性的数量。

返回值
物业数组属性。您必须释放与阵列免费的()

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

宣称
objc / runtime.h

property_copyAttributeValue
返回给定属性名称的属性属性的值。
char *的property_copyAttributeValue(objc_property_t财产,为const char *属性名称)
参数
物业
该物业的价值你感兴趣的内容。

属性名称
C字符串表示的属性的名称。

返回值
该值的字符串属性名称的属性,如果存在的财产 ; 否则,零
。您必须释放与返回值的字符串免费()

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

宣称
objc / runtime.h

property_getAttributes
返回一个属性的属性字符串。
为const char * property_getAttributes(objc_property_t属性)
返回值
C字符串包含属性的属性。

讨论
属性字符串的格式说明“,宣布属性”的Objective-C运行时编程指南

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

宣称
objc / runtime.h

property_getName
返回一个属性的名称。
为const char * property_getName(objc_property_t属性)
返回值
C字符串包含属性的名称。

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

宣称
objc / runtime.h

protocol_addMethodDescription
添加一个方法的协议。
无效protocol_addMethodDescription(协议*原,SEL名,为const char *类型,布尔isRequiredMethod,布尔isInstanceMethod)
参数

该协议要添加一个方法。


要添加的方法的名称。

类型
交流字符串,表示要添加的方法的签名。

isRequiredMethod
布尔值,表示该方法是必需的方法协议。如果为是
,则该方法是必需的方法; 若否
,该方法是可选的方法。

isInstanceMethod
布尔表示方法是否是一个实例方法。如果为是
,则该方法是一个实例方法; 若否
,该方法是一类方法。

讨论
要使用此功能的方法添加到协议中,协议必须是正在建设中。也就是说,你必须添加任何方法来你的Objective-C的运行时(通过注册它之前objc_registerProtocol
功能)。

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

宣称
objc / runtime.h

protocol_addProperty
添加一个属性的协议正在建设中。
无效protocol_addProperty(协议*原,为const char *名,常量objc_property_attribute_t *属性,无符号整型attributeCount,布尔isRequiredProperty,布尔isInstanceProperty)
参数

该协议要添加属性。


你要添加的属性的名称。

属性
物业数组属性。

attributeCount
物业数量的属性

isRequiredProperty
布尔值,表示该属性的访问器方法所需的方法协议。如果是
,该属性的访问器方法所需的方法; 若否
,该属性的访问器方法是可选的方法。

isInstanceProperty
布尔值,表示该属性的访问器方法是实例方法。如果是
,该属性的访问器方法是实例方法。是
是允许的属性的唯一值。因此,如果您将此值设置为否
,则属性将不会被加入到协议。

讨论
该协议要添加的属性必须是正在建设中,拨出而尚未登记的Objective-C的运行时(通过objc_registerProtocol
功能)。

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

宣称
objc / runtime.h

protocol_addProtocol
增加了一个注册协议到另一个协议,正在建设中。
无效protocol_addProtocol(协议原协议补充)
参数

该协议要注册协议加入。

此外
注册协议要添加到

讨论
要添加到(协议)必须是正在建设中,拨出而尚未登记的Objective-C的运行时。要添加(该协议)必须已经注册。

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

宣称
objc / runtime.h

protocol_conformsToProtocol
返回一个布尔值,表示一个协议是否符合其他协议。
布尔protocol_conformsToProtocol(协议原,协议除外)
参数

的协议。

其他
的协议。

返回值
是的
,如果符合其他,否则无

讨论
一个协议可以结合使用类使用采用协议相同的语法其他协议:
@protocol ProtocolName <协议列表>

所有角括号之间列出的协议被认为是ProtocolName协议的一部分。

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

宣称
objc / runtime.h

protocol_copyMethodDescriptionList
返回满足给定的规范给定的协议方法方法描述的数组。
结构objc_method_description * protocol_copyMethodDescriptionList(协议* P,布尔isRequiredMethod,布尔isInstanceMethod,无符号整型* outCount)
参数
p
的协议。

isRequiredMethod
一个布尔值,表示返回的方法有否需要的方法(通过是
可以指定所需的方法)。

isInstanceMethod
一个布尔值,表示返回的方法是否应为实例方法(传递是
指定实例方法)。

outCount
返回时,包含的方法的描述结构的返回数组中的号码。

返回值
交流阵objc_method_description
包含的名称和类型结构p通过指定的方式isRequiredMethodisInstanceMethod。该数组包含* outCount
指针后跟一个空
终止符。您必须释放列表免费的()

如果协议没有声明符合规范的方法,NULL,
则返回和* outCount
为0

讨论
在采用这个协议的其他协议的方法不包括在内。

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

宣称
objc / runtime.h

protocol_copyPropertyList
返回由协议中声明的属性的数组。
objc_property_t * protocol_copyPropertyList(协议协议,无符号整型 outCount)
参数

的协议。

outCount
返回时,包含返回的数组中元素的个数。

返回值
交流数组类型的指针objc_property_t
描述了声明的属性。不包括通过该协议的其他协议中声明的任何属性。该数组包含* outCount
指针后跟一个空
终止符。您必须释放与阵列免费的()

如果协议没有声明的属性,NULL,
则返回和* outCount
为0

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

宣称
objc / runtime.h

protocol_copyProtocolList
返回所通过的协议的协议的数组。
协议** protocol_copyProtocolList(协议原,无符号整型 outCount)
参数

的协议。

outCount
返回时,包含返回的数组中元素的个数。

返回值
交流阵列通过协议。该数组包含* outCount
指针后跟一个空
终止符。您必须释放与阵列免费的()

如果协议没有声明的属性,NULL,
则返回和* outCount
为0

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

宣称
objc / runtime.h

protocol_getMethodDescription
返回指定给定的协议的方法的方法描述结构。
结构objc_method_description protocol_getMethodDescription(协议* P,SEL ASEL,布尔isRequiredMethod,布尔isInstanceMethod)
参数
p
的协议。

ASEL
选择器

isRequiredMethod
一个布尔值,表示是否ASEL是必需的方法。

isInstanceMethod
一个布尔值,表示是否ASEL是一个实例方法。

返回值
一个objc_method_description
结构,描述根据指定的方法ASELisRequiredMethodisInstanceMethod用于协议p
如果该协议不包含所指定的方法,返回一个objc_method_description
与价值结构{NULL,NULL}

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

宣称
objc / runtime.h

protocol_getName
返回一个协议的名称。
为const char * protocol_getName(协议* P)
参数
p
的协议。

返回值
该协议的名称p为C字符串。

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

宣称
objc / runtime.h

protocol_getProperty
返回给定协议的指定属性。
objc_property_t protocol_getProperty(协议*原,为const char *的名字,布尔isRequiredProperty,布尔isInstanceProperty)
参数

的协议。


一个属性的名称。

isRequiredProperty
一个布尔值,表示是否名字是必需的属性。

isInstanceProperty
一个布尔值,表示是否名字是实例属性。

返回值
该物业指定的名称isRequiredPropertyisInstanceProperty,或NULL
如果没有原始的属性是否符合规范。

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

宣称
objc / runtime.h

protocol_isEqual
返回一个布尔值,表示两个协议是否相等。
布尔protocol_isEqual(协议原,协议除外)
参数

的协议。

其他
的协议。

返回值
是的
,如果相同,否则无

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

宣称
objc / runtime.h

sel_getName
返回由给定的选择器指定的方法的名称。
为const char * sel_getName(SEL aSelector)
参数
aSelector
类型的指针SEL
。通过他的名字,你想确定选择。

返回值
C字符串表示选择器的名称。

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

宣称
objc / runtime.h

sel_getUid
注册到Objective-C的运行时系统的方法名。
SEL sel_getUid(为const char * str中)
参数
海峡
一个指针,指向一个C字符串。传给你要注册的方法的名称。

返回值
类型的指针SEL
指定选择器的命名方法。

讨论
该方法的实现是相同的实施sel_registerName

版本说明
在此之前的OS X 10.0版本,这个方法试图找到选择映射到给定的名称,返回NULL,
如果没有找到选择。这对安全性进行了改变,因为它指出,许多这个函数的调用者没有检查返回值NULL

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

宣称
objc / objc.h

sel_isEqual
返回一个布尔值,表示两个选择是否相等。
布尔sel_isEqual(SEL LHS,SEL RHS)
参数
LHS
选择与比较RHS

RHS
选择与比较LHS

返回值
是的
,如果RHSRHS是平等的,否则无

讨论
sel_isEqual
相当于==

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

宣称
objc / runtime.h

sel_registerName
注册到Objective-C的运行时系统的方法,映射方法名选择器,并返回选择值。
SEL sel_registerName(为const char * str中)
参数
海峡
一个指针,指向一个C字符串。传给你要注册的方法的名称。

返回值
类型的指针SEL
指定选择器的命名方法。

讨论
您必须注册一个方法名与Objective-C的运行时系统,以获得该方法的选择之前,你可以添加方法的类的定义。如果方法名称已被注册,该函数只返回选择。

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

宣称
objc / runtime.h

数据类型
类定义的数据结构

不透明类型,表示一个Objective-C类。
typedef结构objc_class *级;
空房
可在OS X v10.6中及更高版本。

宣称
objc / objc.h

方法
不透明类型,表示一个类定义的方法。
typedef结构objc_method *方法;
空房
可在OS X v10.6中及更高版本。

宣称
objc / runtime.h

伊瓦尔
不透明类型,代表了一个实例变量。
typedef结构objc_ivar *伊瓦尔;
空房
可在OS X v10.6中及更高版本。

宣称
objc / runtime.h

分类
不透明类型,代表一个类别。
typedef结构objc_category *类别;
空房
可在OS X v10.6中及更高版本。

宣称
objc / runtime.h

objc_property_t
不透明类型,代表了Objective-C中声明的属性。
typedef结构objc_property * objc_property_t;
空房
可在OS X v10.6中及更高版本。

宣称
objc / runtime.h

进出口
一个指针,指向的方法实施的开始。
ID(* IMP)(身份证,SEL,...)
讨论
这个数据类型为指针,以实现该方法的功能的启动。该功能使用标准C调用约定,实现当前的CPU架构。第一个参数是指向自我
(也就是这个类,或者对于一个类的方法,一个指向元类的特定实例的内存)。第二个参数是方法选择。该方法的参数如下。

SEL
定义一个不透明的类型表示的方法选择。
typedef结构objc_selector * SEL;
讨论
方法选择器被用来表示一个方法在运行时的名称。一种方法是选择已注册(或“映射”)与Objective-C运行C字符串。由编译器生成的选择器会自动运行时,当类被加载映射。
您可以在运行时添加新的选择和检索利用现有的功能选择sel_registerName

当使用选择器,您必须使用从返回的值sel_registerName
或Objective-C的编译器指令@selector()
。你不能简单地投了C字符串到SEL

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

宣称
objc / objc.h

objc_method_description
定义一个Objective-C的方法。
结构objc_method_description { SEL名; char *的类型;};

该方法在运行时的名称。

类型

该类型的方法参数。

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

宣称
objc / runtime.h

objc_method_list
包含方法定义的数组。
结构objc_method_list{结构objc_method_list *过时;INT method_count;结构objc_method method_list [1];}

过时了

保留供将来使用。

method_count

一个整数,指定的方法清单阵列中的方法的数目。

method_list

数组方法
的数据结构。

空房
可在OS X V10.5及更高版本。
不推荐使用的OS X v10.5中。
不适用于64位应用程序。

宣称
objc / runtime.h

objc_cache
性能优化的方法调用。包含指向最近使用过的方法。
结构objc_cache{unsigned int的面具;unsigned int类型占用;方法水桶[1];};

面膜

一个整数,指定分配缓存桶(减一)的总数。在方法查找,在Objective-C的运行时使用此字段来确定其开始的线性搜索索引水桶
阵。一个指针,指向一个方法的选择是使用逻辑与操作(屏蔽,这一领域的指数=(面具和选择器))
。这可作为一个简单的散列算法

占用

一个整数,指定所占用的缓存桶的总数。

指针数组方法
的数据结构。该阵列可包含不超过面膜+ 1
项。注意,指针可以是NULL
,表示该高速缓冲桶是未占用的,并且占据桶可能不连续。该阵列可随着时间的推移。

讨论
要限制需要执行方法列出线性搜索经常访问的方法,操作的定义,可以大大减缓方法查找,在Objective-C的运行时函数指针存储在类中最近被调用方法的定义一个objc_cache
数据结构。

objc_protocol_list
代表的正式协议的列表。
结构objc_protocol_list{结构objc_protocol_list 旁边;诠释计数;协议列表[1];};

下一个

一个指向另一个objc_protocol_list
数据结构。

在此列表中的协议的数目。

列表

指针数组
代表协议的数据结构。

讨论
正式协议是一个类定义,声明了一组方法,其中的类必须实现。这样的类定义中没有实例变量。一个类定义可以保证实现任意数量的正式协议。

空房
可在OS X v10.6中及更高版本。
不适用于64位应用程序。

宣称
objc / runtime.h

objc_property_attribute_t
定义一个属性的属性。
typedef结构{ 为const char *名称; 为const char *值;} objc_property_attribute_t;

该属性的名称。

该属性的值(通常为空)。

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

宣称
objc / runtime.h

例如数据类型
这些都是表示对象,类和超类的数据类型。
ID
指向一个类的实例。

objc_object
表示一个类的实例。

objc_super
指定实例的父类。

ID
一个指针,指向一个类的实例。
typedef结构objc_object * ID;
空房
可在OS X v10.6中及更高版本。

宣称
objc / objc.h

objc_object
表示一个类的实例。
结构objc_object { ISA类;};

ISA

其中一个指针,指向类定义这个对象是一个实例。

讨论
当你创建一个特定的类的实例,所分配的内存中包含objc_object
数据结构,它直接后跟类的实例变量的数据。
在页头
和allocWithZone:
Foundation框架类NSObject的方法使用功能class_createInstance
创建objc_object
数据结构。

objc_super
指定实例的父类。
结构objc_super{ID接收器;Class类;};

接收器

类型的指针ID
。指定一个类的实例。

一个指针,指向一个
的数据结构。指定实例消息的特定超。

讨论
编译器会生成objc_super
数据结构遇到的时候超
关键字作为信息的接收者。它指定要传 ​​递消息的特定超类的类定义。

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

宣称
objc / message.h

布尔值
BOOL
类型来表示一个布尔值。
的typedef符号字符BOOL;
讨论
BOOL
明确正式签订@encode(布尔)
是Ç
而不是ç
即使-funsigned,字符
被使用。
对于值,请参阅“布尔值”

特别注意事项
由于类型BOOL
实际上是字符
,它不表现在以同样的方式为C _Bool
值或C + + 布尔值。例如,有条件的在下面的代码会是假的在i386(和真正的在PPC):

  • (BOOL)值{

返回256;

}

然后//

如果([个体值])doStuff();

相比之下,有条件的在下面的代码将在所有平台上(即使真正的sizeof(BOOL)== 1
):

  • (布尔)值{

返回256;

}

然后//

如果([个体值])doStuff();

空房
可在OS X 10.1及更高版本。

宣称
objc / objc.h

联想参考
objc_AssociationPolicy
输入到指定的关联的行为。
的typedef uintptr_t的objc_AssociationPolicy;
讨论
对于值,请参阅“关联对象的行为”

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

宣称
objc / runtime.h

常量
布尔值
这些宏定义方便的常量来表示布尔值。
#定义是(BOOL)1#定义编号(布尔)0
常量

定义是
为1

可在OS X 10.0版和更高版本。
宣布在objc / objc.h

定义编号
为0

可在OS X 10.0版和更高版本。
宣布在objc / objc.h

宣称
objc.h

Null值
这些宏定义类和实例的空值。
#定义零__DARWIN_NULL#定义无__DARWIN_NULL
常量

定义ID
空实例。
可在OS X 10.0版和更高版本。
声明中IONDRVLibraries.h

定义ID
为空类。
可在OS X 10.0版和更高版本。
宣布在objc / objc.h

宣称
objc.h

调度函数原型
这个宏表示调度功能是否必须强制转换为相应的函数指针类型。
#定义OBJC_OLD_DISPATCH_PROTOTYPES 1
常量
OBJC_OLD_DISPATCH_PROTOTYPES

OBJC_OLD_DISPATCH_PROTOTYPES == 0
强制执行调度功能必须强制转换为相应的函数指针类型的规则。
可在OS X v10.8及更高版本。
宣布在objc / objc-api.h

宣称
objc-api.h

Objective-C的根类
这个宏诠释的一类作为是一个Objective-C的根类。
#定义OBJC_ROOT_CLASS
常量
OBJC_ROOT_CLASS

如果你定义一个Objective-C的根类,您会收到一个编译错误,表明类没有指定基类中定义。您可以通过在根类的定义(也就是前前避免这个编译器错误@interface
指令)与OBJC_ROOT_CLASS

可在OS X v10.9及更高版本。
宣布在objc / objc-api.h

宣称
objc-api.h

局部变量的存储时间
这个宏表示存储在特定的局部变量的值不应积极优化过程中释放的编译器。
#定义NS_VALID_UNTIL_END_OF_SCOPE
常量
NS_VALID_UNTIL_END_OF_SCOPE

标记类型的局部变量ID
或指针到ObjC对象类型,以便存储到这些局部变量的值不积极优化过程中释放的编译器。相反,该值被保持,直到该变量被分配给一次,或局部变量的范围的端部(如在一个复合语句的方法或定义)。
可在OS X v10.8及更高版本。
声明中NSObjCRuntime.h

宣称
NSObjCRuntime.h

关联对象的行为
有关关联引用的政策。
枚举{ OBJC_ASSOCIATION_ASSIGN = 0, OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1, OBJC_ASSOCIATION_COPY_NONATOMIC = 3, OBJC_ASSOCIATION_RETAIN = 01401, OBJC_ASSOCIATION_COPY = 01403};
常量
OBJC_ASSOCIATION_ASSIGN

指定一个弱引用关联的对象。
可在OS X v10.6中及更高版本。
宣布在objc / runtime.h

OBJC_ASSOCIATION_RETAIN_NONATOMIC

指定的强引用关联的对象,以及该组织不以原子制成。
可在OS X v10.6中及更高版本。
宣布在objc / runtime.h

OBJC_ASSOCIATION_COPY_NONATOMIC

指定关联的对象被复制,以及该组织不以原子制成。
可在OS X v10.6中及更高版本。
宣布在objc / runtime.h

OBJC_ASSOCIATION_RETAIN

指定的强引用关联的对象,而该组织是原子制成。
可在OS X v10.6中及更高版本。
宣布在objc / runtime.h

OBJC_ASSOCIATION_COPY

指定关联的对象被复制,而该组织是原子制成。
可在OS X v10.6中及更高版本。
宣布在objc / runtime.h

推荐阅读更多精彩内容