oc中获得class的方法有三种:
①使用NSObject的NSClassFromString(NSString * aClassName)函数来获取Class
如
Class clazz = NSClassFromString(@"NSDate");//通过字符串来获取class
②使用对象对应的实例方法class获得class
NSDate date = [[NSDate alloc]init];
[date class];
③使用类中的Class类方法
如NSDate.class
代码测试:
#import <Foundation/Foundation.h>
int main(int argc ,char* argv[]){
@autoreleasepool{
Class clazz = NSClassFromString(@"NSDate");//通过字符串来获取class
NSLog(@"%@",clazz);
id date = [[clazz alloc ] init];//直接用class来创建类
//NSLog(@"%@",date);
NSLog(@"%@",[date class]);//通过对象来获取class
NSLog(@"%@",NSDate.class);//通过类来获取class
}
}测试结果:
为什么类方法获得的class和对象获得的class方法会不一样?
目前考虑,oc很多设计采用类簇的设计(什么是类簇的设计),NSDate 只是这个类簇的前端,当程序调用创建对象时,程序实际上返回的只是NSDate的子类(_NSDate)的实例,而不是NSDate的实例。所以返回的date对象的class方法来获取Class时返回的是_NSDate。