总结iOS Runtime中使用的函数

概述

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_isMetaClass(AnyClass!)

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

func class_getInstanceSize(AnyClass!)

返回类的实例的大小。

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

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

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

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

func class_getIvarLayout(AnyClass!)

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

func class_getWeakIvarLayout(AnyClass!)

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

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

Ivar为给定类设置弱的布局

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

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

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

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

func class_getInstanceMethod(AnyClass!, Selector!)

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

func class_getClassMethod(AnyClass!, Selector!)

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

func class_getMethodImplementation(AnyClass!, Selector!)

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

func class_getMethodImplementation_stret(AnyClass!, Selector!)

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

func class_respondsToSelector(AnyClass!, Selector!)

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

func class_conformsToProtocol(AnyClass!, Protocol!)

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

func class_getVersion(AnyClass!)

返回类定义的版本号。

func class_setVersion(AnyClass!, Int32)

设置类定义的版本号。

添加类

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 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 objc_copyImageNames(UnsafeMutablePointer<UInt32>!)

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

func class_getImageName(AnyClass!)

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

使用协议

func objc_copyProtocolList(UnsafeMutablePointer<UInt32>!)

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

func objc_registerProtocol(Protocol!)

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

func protocol_addProtocol(Protocol!, Protocol!)

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

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_conformsToProtocol(Protocol!, Protocol!)

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

使用属性

使用Objective-C语言特性

func objc_enumerationMutation(Any!)

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

func imp_implementationWithBlock(Any!)

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

func imp_getBlock(IMP!)

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

func imp_removeBlock(IMP!)

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

func objc_loadWeak(AutoreleasingUnsafeMutablePointer<AnyObject?>!)

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

类定义数据结构

Method

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

Ivar

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

Category

表示类别的不透明类型。

objc_property_t

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

objc_method_description

定义一个Objective-C方法。

objc_property_attribute_t

实例数据类型

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

objc_object
objc_super

指定实例的超类。

常量

调度函数原型

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

Associative Object Behaviors

与关联引用相关的策略。

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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值