总结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)。最后,已过时NXHashTable
,NXMapTable
限于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
给定类的弱s 的布局的描述。
func class_setWeakIvarLayout(AnyClass!, UnsafePointer<UInt8>!)
Ivar
为给定类设置弱s 的布局。
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
与关联引用相关的策略。
- 总结iOS Runtime中使用的函数
- iOS中runtime的使用总结
- 总结iOS中runtime的使用
- iOS开发中runtime的使用
- 【iOS runtime】iOS中函数的动态加载
- iOS Runtime的使用
- ios的runtime使用
- runtime的使用总结
- iOS中RunTime的应用
- IOS的runtime基础使用
- ios-Runtime的简单使用
- 关于Runtime在项目中使用的总结
- IOS-RunTime、RunLoop自己的总结
- iOS最实用的runtime总结
- Java中Runtime的使用
- Java中Runtime的使用
- java中Runtime的使用
- java中Runtime的使用
- windows系统下搭建linux虚拟机及安装各种生产环境的统一解决方案
- min()/max()/clamp()
- Eclipse一些常用的快捷键
- Android 中的dm-verity
- js中undefined、null、“”的认识
- 总结iOS Runtime中使用的函数
- springmvc4 mybatis 整合 框架源码 bootstrap html5 mysql oracle sqlsever
- leetcode 91. Decode Ways
- AdaBoost算法理解
- 解读标准—从IEEE 1149.1到IEEE 1149.6 看芯片可测试性设计
- eclipse下搭建 Maven环境
- 后台开发程序员常用的linux命令及使用解释,简单查看服务器使用情况
- 23种设计模式汇总整理
- go语言笔记 - 服务端 socket开发相关