版本记录
版本号 | 时间 |
---|---|
V1.0 | 2017.07.26 |
前言
OC是运行时的语言,底层就是运行时,可以说runtime是OC的底层,很多事情也都可以用运行时解决,下面就讲述一下运行时runtime的知识以及它的妙用。
runtime 基本
下面就说一下runtime
的基本知识。Runtime
是一套底层的C
语言API
(包含强大的C语言数据类型和函数),OC
代码都是基于Runtime
实现的,即编写的OC代码最终都会转成Runtime
的代码。
下面就是苹果的runtime开发者文档。
1. runtime作用
- 获取类的私有变量。
- 动态产生类,成员变量和方法。
- 动态修改类,成员变量和方法。
- 对换两个方法的实现(
swizzle
)
runtime基本架构
runtime
底层很多C
语言函数,下面我们就介绍下。
1. 职能任务
使用类
- 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
添加类
类的实例化
用工作实例
- 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
使用实例变量工作
联想参考
发送消息
当它遇到一个方法调用时,编译器可能会生成调用任意几个函数来执行实际的消息调度,根据不同的接收器,返回值和参数。您可以使用这些功能来动态地从你自己的纯C代码中调用方法,或者使用不NSObject
的公司允许说法的形式进行。
-
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_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
与工作性质
使用Objective-C语言特征
- objc_enumerationMutation
- objc_setEnumerationMutationHandler
- imp_implementationWithBlock
- imp_getBlock
- imp_removeBlock
- objc_loadWeak
- objc_storeWeak
参考资料
后记
未完,待续~~~