美文网首页iOS从入门到放弃runtime
Objective-C Runtime官放文档翻译

Objective-C Runtime官放文档翻译

作者: 有一种再见叫青春 | 来源:发表于2016-11-01 16:51 被阅读802次

    官方源码下载地址: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

    相关文章

      网友评论

      • 90ee09adad98:这个是机器翻译的吗?ivar 变成了 伊瓦尔。。。 排版也不易阅读,不过还是感谢分享。
        有一种再见叫青春:@Motom 文字看个大概意思就好 要是想深入了解 还是看官方文档和源码好一些

      本文标题:Objective-C Runtime官放文档翻译

      本文链接:https://www.haomeiwen.com/subject/pfbmuttx.html