文章目录
Intro
在Java中有反射,就是说你拿到某个类型对应的Class对象,就可以用这个拿到的Class对象去实例化对应类型的对象。
举个例子:
// 有三种方法可以拿到某个类型对应的 Class对象。
Class clazz = Class.forName("com.test.Person"); // Class.forName("类的全路径");
// clazz = person.getClass();// 对象名.getClass();
// clazz = Person.class; // 类名.class
// 用得到的Class对象实例化具体类型的对象。
Object obj = clazz.newInstance();
obj.xxx; // 调用想要的操作。
而在 Objective-C 中也有反射这个特性所需的API:
[类名 class]
[对象名 class]
都可以获得该类型对应的 Class对象。
Demo
Screenshot
Code
//
// main.m
// 类
//
// Created by wuyujin1997 on 2023/2/26.
//
#import <Foundation/Foundation.h>
@interface Person : NSObject
- (void) sayHi;
@end
@implementation Person
- (void) sayHi {
NSLog(@"hello");
}
@end
int main(int argc, const char * argv[]) {
Class personClass = [Person class];
NSLog(@"按 [类名 class] 获取该类的Class对象: %@ %p", personClass, personClass);
// 通过某个类型对应的Class对象可以实例化处该类的对象。
Person *person = [personClass new];
[person sayHi];
Class personClassGetFromObject = [person class];
NSLog(@"按 [对象 class] 获取该类的Class对象: %@ %p", personClassGetFromObject, personClassGetFromObject);
return 0;
}
Output
2023-02-27 22:52:51.112666+0800 类[39830:1175942] 按 [类名 class] 获取该类的Class对象: Person 0x1000080c8
2023-02-27 22:52:51.112926+0800 类[39830:1175942] hello
2023-02-27 22:52:51.112954+0800 类[39830:1175942] 按 [对象 class] 获取该类的Class对象: Person 0x1000080c8
Program ended with exit code: 0