【IOS 开发学习总结-OC-23】★objective-c的反射机制
objective-c 提供的与运行环境交互的方式
objective-c 提供了3种编程方式与运行环境交互。
- 直接通过 oc 源代码。——最常见的方式。其中,数据结构负责保存类,类别中定义的数据,而函数负责处理方法调用。
- 通过 NSObject 类中定义的方法进行动态编程。
大部分对象都可以直接调用NSObject 的方法进行编程——绝大部分类都是NSObject 类的子类(NSProxy例外)。少数情况下,NSObject只提供了方法模板,并没有给方法提供实现代码。 - 直接调用运行时函数进行动态编程。
获得 class
objective-c程序中获得 class 通常有3种方式:
1. 调用某个类的 class 方法来获取该类对应的 class。推荐这种方式———代码更安全(编译时检查 class 对象是否存在),程序性能更高(无需调用方法)。
2. 使用 class NSClassFromString(NSStrin* aClassName) 函数来获得 class——该函数需要传入字符串参数,该参数 是某个类的类名。
3. 调用某个对象的 class 方法——该方法为 NSObject 的一个方法,所有的 oc 对象都可以调用该方法。
示例程序:
#import <Foundation/Foundation.h>
int main(int argc , char * argv[])
{
@autoreleasepool{
// 通过字符串来获取Class
Class clazz = NSClassFromString(@"NSDate");
NSLog(@"%@" , clazz);
// 直接使用Class来创建对象
id date = [[clazz alloc] init];
NSLog(@"%@" , date);
// 通过对象来获取Class
NSLog(@"%@" , [date class]);
// 通过类来获取class
NSLog(@"%d" , clazz == NSDate.class);
}
}
编译运行结果:
2015-09-29 18:21:09.590 923[5960:414788] NSDate
2015-09-29 18:21:09.600 923[5960:414788] 2015-09-29 10:21:09 +0000
2015-09-29 18:21:09.600 923[5960:414788] __NSTaggedDate
2015-09-29 18:21:09.600 923[5960:414788]