概述
在计算机科学中,反射是指计算机程序在运行时(Run time)可以访问、检测和修改它本身状态或行为的一种能力。用比喻来说,反射就是程序在运行的时候能够“观察”并且修改自己的行为。布莱恩·史密斯(Brian Cantwell Smith)在1982年的博士论文《编程语言中的步骤式反射》("Procedural Reflection in Programming Languages")中介绍了“编程语言的计算反射”概念,并且引入meta-circular解释器的概念用作3-Lisp的一个组成部分。本文主要讨论OC中的反射。OC反射机制牵涉到的方法不止这么多,这里只是列出一些常用的。
基本反射
- 获取class
[self class]
- 根据字符串获取class
NSClassFromString(@“className”)
- 根据字符串获取方法
NSSelectorFromString(@“method”)
- 检查继承关系
- (BOOL)isKindOfClass:(Class)aClass
- (BOOL)isMemberOfClass:(Class)aClass
+ (BOOL)isSubclassOfClass:(Class)aClass
- (BOOL)conformsToProtocol:(Protocol *)aProtocol
高级反射
- 消息发送
objc_msgSend(receiver, selector)
objc_msgSend(receiver, selector, arg1, arg2,...)
- 动态绑定
objc_setAssociatedObject objc_getAssociatedObject
总结
通过以上方法我们可以可以获取类信息、属性方法获取、类的动态加载、方法的动态调用、动态添加类和方法等。
网友评论