总结iOS Runtime中使用的函数

来源:互联网 发布:cydia不能安装软件 编辑:程序博客网 时间:2024/06/04 17:55

概述

Objective-C运行时是一个运行时库,为Objective-C语言的动态属性提供支持,因此与所有Objective-C应用程序相连。Objective-C运行时库支持函数在共享库中实现/usr/lib/libobjc.A.dylib

在Objective-C中编程时,通常不需要直接使用Objective-C运行时库。此API主要用于在Objective-C和其他语言之间开发桥接层,或者用于低级调试。

Objective-C运行时库的macOS实现是Mac独有的。对于其他平台,GNU编译器集合提供了具有类似API的不同实现。本文档仅介绍了macOS实现。

低级Objective-C运行时API在OS X版本10.5中进行了大量更新。许多函数和所有现有的数据结构都被新的函数所取代。旧的函数和结构在32位模式中不推荐使用,在64位模式下不存在。即使在64位模式类计数,协议计数,每个类的方法,每个类的ivars,每个方法的参数,每个方法的sizeof(所有参数)和类版本号中,API也将几个值限制为32位整数。此外,新的Objective-C ABI(此处未描述)进一步限制sizeof(anInstance)为32位,并且另外三个值为24位 - 每个类的方法,每个类的ivars,以及sizeof(单个ivar)。最后,已过时NXHashTableNXMapTable限于40亿件。

字符串编码

char *运行时API中的所有内容都应该被认为具有UTF-8编码。

下面的“已弃用”表示“对于32位代码,在OS X版本10.5中已弃用,对于64位代码不允许。

符号

使用类

func class_getName(AnyClass!)

返回类的名称。

func class_getSuperclass(AnyClass!)

返回类的超类。

func class_setSuperclass(AnyClass!, AnyClass!)已弃用
func class_isMetaClass(AnyClass!)

返回一个布尔值,指示类对象是否是元类。

func class_getInstanceSize(AnyClass!)

返回类的实例的大小。

func class_getInstanceVariable(AnyClass!, UnsafePointer<Int8>!)

返回Ivar给定类的指定实例变量。

func class_getClassVariable(AnyClass!, UnsafePointer<Int8>!)

返回Ivar给定类的指定类变量。

func class_addIvar(AnyClass!, UnsafePointer<Int8>!, Int, UInt8, UnsafePointer<Int8>!)

向类添加一个新的实例变量。

func class_copyIvarList(AnyClass!, UnsafeMutablePointer<UInt32>!)

描述由类声明的实例变量。

func class_getIvarLayout(AnyClass!)

返回Ivar给定类布局的描述。

func class_setIvarLayout(AnyClass!, UnsafePointer<UInt8>!)

设置Ivar给定类布局。

func class_getWeakIvarLayout(AnyClass!)

返回Ivar给定类的弱的布局的描述

func class_setWeakIvarLayout(AnyClass!, UnsafePointer<UInt8>!)

Ivar为给定类设置弱的布局

func class_getProperty(AnyClass!, UnsafePointer<Int8>!)

返回具有给定类的给定名称的属性。

func class_copyPropertyList(AnyClass!, UnsafeMutablePointer<UInt32>!)

描述类声明的属性。

func class_addMethod(AnyClass!, Selector!, IMP!, UnsafePointer<Int8>!)

向具有给定名称和实现的类添加一个新方法。

func class_getInstanceMethod(AnyClass!, Selector!)

返回给定类的指定实例方法。

func class_getClassMethod(AnyClass!, Selector!)

返回指向描述给定类的给定类方法的数据结构的指针。

func class_copyMethodList(AnyClass!, UnsafeMutablePointer<UInt32>!)

描述由类实现的实例方法。

func class_replaceMethod(AnyClass!, Selector!, IMP!, UnsafePointer<Int8>!)

替换给定类的方法的实现。

func class_getMethodImplementation(AnyClass!, Selector!)

返回如果将特定消息发送到类的实例时将调用的函数指针。

func class_getMethodImplementation_stret(AnyClass!, Selector!)

返回如果将特定消息发送到类的实例时将调用的函数指针。

func class_respondsToSelector(AnyClass!, Selector!)

返回一个布尔值,指示类的实例是否响应特定的选择器。

func class_addProtocol(AnyClass!, Protocol!)

向类添加协议。

func class_addProperty(AnyClass!, UnsafePointer<Int8>!, UnsafePointer<objc_property_attribute_t>!, UInt32)

向类添加属性。

func class_replaceProperty(AnyClass!, UnsafePointer<Int8>!, UnsafePointer<objc_property_attribute_t>!, UInt32)

替换类的属性。

func class_conformsToProtocol(AnyClass!, Protocol!)

返回一个布尔值,指示类是否符合给定的协议。

func class_copyProtocolList(AnyClass!, UnsafeMutablePointer<UInt32>!)

描述类所采用的协议。

func class_getVersion(AnyClass!)

返回类定义的版本号。

func class_setVersion(AnyClass!, Int32)

设置类定义的版本号。

添加类

func objc_allocateClassPair(AnyClass!, UnsafePointer<Int8>!, Int)

创建一个新类和元类。

func objc_disposeClassPair(AnyClass!)

销毁一个类及其相关的元类。

func objc_registerClassPair(AnyClass!)

注册使用分配的类objc_allocateClassPair(_:_:_:)

func objc_duplicateClass(AnyClass!, UnsafePointer<Int8>!, Int)

用于基金会的关键价值观察。

使用实例

func object_getIvar(Any!, Ivar!)

读取对象中的实例变量的值。

func object_setIvar(Any!, Ivar!, Any!)

设置对象中的实例变量的值。

func object_getClassName(Any!)
func object_getClass(Any!)

返回对象的类。

func object_setClass(Any!, AnyClass!)

设置对象的类。

获取类定义

func objc_getClassList(AutoreleasingUnsafeMutablePointer<AnyClass?>!, Int32)

获取注册类定义的列表。

func objc_copyClassList(UnsafeMutablePointer<UInt32>!)

创建并返回一个指向所有注册类定义的指针列表。

func objc_lookUpClass(UnsafePointer<Int8>!)

返回指定类的类定义。

func objc_getClass(UnsafePointer<Int8>!)

返回指定类的类定义。

func objc_getRequiredClass(UnsafePointer<Int8>!)

返回指定类的类定义。

func objc_getMetaClass(UnsafePointer<Int8>!)

返回指定类的元类定义。

使用实例变量

func ivar_getName(Ivar!)

返回实例变量的名称。

func ivar_getTypeEncoding(Ivar!)

返回实例变量的类型字符串。

func ivar_getOffset(Ivar!)

返回实例变量的偏移量。

关联参考

func objc_setAssociatedObject(Any!, UnsafeRawPointer!, Any!, objc_AssociationPolicy)

使用给定的键和关联策略为给定对象设置关联值。

func objc_getAssociatedObject(Any!, UnsafeRawPointer!)

返回与给定键的给定对象相关联的值。

func objc_removeAssociatedObjects(Any!)

删除给定对象的所有关联。

使用方法

func method_getName(Method!)

返回方法的名称。

func method_getImplementation(Method!)

返回方法的实现。

func method_getTypeEncoding(Method!)

返回描述方法的参数和返回类型的字符串。

func method_copyReturnType(Method!)

返回描述方法的返回类型的字符串。

func method_copyArgumentType(Method!, UInt32)

返回描述方法的单个参数类型的字符串。

func method_getReturnType(Method!, UnsafeMutablePointer<Int8>!, Int)

通过引用返回一个描述方法的返回类型的字符串。

func method_getNumberOfArguments(Method!)

返回方法接受的参数数。

func method_getArgumentType(Method!, UInt32, UnsafeMutablePointer<Int8>!, Int)

通过引用返回描述方法的单个参数类型的字符串。

func method_getDescription(Method!)

返回指定方法的方法描述结构。

func method_setImplementation(Method!, IMP!)

设置方法的实现。

func method_exchangeImplementations(Method!, Method!)

交换两种方法的实现。

使用库

func objc_copyImageNames(UnsafeMutablePointer<UInt32>!)

返回所有加载的Objective-C框架和动态库的名称。

func class_getImageName(AnyClass!)

返回类源自的动态库的名称。

func objc_copyClassNamesForImage(UnsafePointer<Int8>!, UnsafeMutablePointer<UInt32>!)

返回指定库或框架中的所有类的名称。

使用选择器

func sel_getName(Selector!)func sel_registerName(UnsafePointer<Int8>!)func sel_getUid(UnsafePointer<Int8>!)
func sel_isEqual(Selector!, Selector!)

返回一个布尔值,指示两个选择器是否相等。

使用协议

func objc_getProtocol(UnsafePointer<Int8>!)

返回指定的协议。

func objc_copyProtocolList(UnsafeMutablePointer<UInt32>!)

返回运行时已知的所有协议的数组。

func objc_allocateProtocol(UnsafePointer<Int8>!)

创建新的协议实例。

func objc_registerProtocol(Protocol!)

使用Objective-C运行时注册新创建的协议。

func protocol_addMethodDescription(Protocol!, Selector!, UnsafePointer<Int8>!, Bool, Bool)

向协议添加方法。

func protocol_addProtocol(Protocol!, Protocol!)

将已注册的协议添加到正在构建的另一个协议。

func protocol_addProperty(Protocol!, UnsafePointer<Int8>!, UnsafePointer<objc_property_attribute_t>!, UInt32, Bool, Bool)

将属性添加到正在构建的协议。

func protocol_getName(Protocol!)

返回协议的名称。

func protocol_isEqual(Protocol!, Protocol!)

返回一个布尔值,指示两个协议是否相等。

func protocol_copyMethodDescriptionList(Protocol!, Bool, Bool, UnsafeMutablePointer<UInt32>!)

返回满足给定协议的给定规范的方法的方法描述的数组。

func protocol_getMethodDescription(Protocol!, Selector!, Bool, Bool)

返回给定协议的指定方法的方法描述结构。

func protocol_copyPropertyList(Protocol!, UnsafeMutablePointer<UInt32>!)

返回由协议声明的属性的数组。

func protocol_getProperty(Protocol!, UnsafePointer<Int8>!, Bool, Bool)

返回给定协议的指定属性。

func protocol_copyProtocolList(Protocol!, UnsafeMutablePointer<UInt32>!)

返回协议所采用协议的数组。

func protocol_conformsToProtocol(Protocol!, Protocol!)

返回一个布尔值,指示一个协议是否符合另一个协议。

使用属性

func property_getName(objc_property_t!)

返回属性的名称。

func property_getAttributes(objc_property_t!)

返回属性的属性字符串。

func property_copyAttributeValue(objc_property_t!, UnsafePointer<Int8>!)

返回给定属性名称的属性属性的值。

func property_copyAttributeList(objc_property_t!, UnsafeMutablePointer<UInt32>!)

返回给定属性的属性属性数组。

使用Objective-C语言特性

func objc_enumerationMutation(Any!)

当在foreach迭代期间检测到突变时,由编译器插入。

func objc_setEnumerationMutationHandler(((Any?) -> Void)!)

设置当前的突变处理程序。

func imp_implementationWithBlock(Any!)

当调用方法时,创建一个指向调用指定块的函数的指针。

func imp_getBlock(IMP!)

返回与IMP使用创建的块相关联的块imp_implementationWithBlock(_:)

func imp_removeBlock(IMP!)

IMP使用创建的块中分离块imp_implementationWithBlock(_:),并释放创建的块的副本。

func objc_loadWeak(AutoreleasingUnsafeMutablePointer<AnyObject?>!)

加载由弱指针引用的对象并返回它。

func objc_storeWeak(AutoreleasingUnsafeMutablePointer<AnyObject?>!, Any!)

__weak变量中存储新值

类定义数据结构

Method

表示类定义中的方法的不透明类型。

Ivar

表示实例变量的不透明类型。

Category

表示类别的不透明类型。

objc_property_t

一个不透明的类型,表示一个Objective-C声明的属性。

objc_method_description

定义一个Objective-C方法。

objc_property_attribute_t

实例数据类型

这些是表示对象,类和超类的数据类型。

  • objc_object 指向类的实例的指针。

  • objc_object 表示类的实例。

  • objc_super 指定实例的超类。

objc_object
objc_super

指定实例的超类。

常量

调度函数原型

此宏指示是否必须将分派函数强制转换为适当的函数指针类型。

Associative Object Behaviors

与关联引用相关的策略。

来源:https://developer.apple.com/reference/objectivec/objective_c_runtime


0 0