将字符串("MyExampleClass")转换为类名(MyExampleClass)

Emp*_*ack 29 cocoa objective-c objective-c-runtime

我想将字符串转换为类名.想象一下,我有一个更改的字符串,包含一个类名,例如字符串"MyExampleClass".现在,我想创建一个类的对象MyExampleClass.我必须从字符串中获取类名.我想做类似以下的事情.(将代码视为草图.)

NSString *classNameStr = "MyExampleClass";
id theClass = [UIClass classFromString:classNameStr];
theClass *myObject = [[theClass alloc] init];
Run Code Online (Sandbox Code Playgroud)

这样做的正确方法是什么?

Ale*_*lex 76

这是你想要的:

Class theClass = NSClassFromString(classNameStr);
id myObject = [[theClass alloc] init];
Run Code Online (Sandbox Code Playgroud)

请注意,您不能theClass用作类型名称(即theClass *myObject).你必须使用id它.


jus*_*tin 23

你想要NSClassFromString:

NSString *classNameStr = @"MyExampleClass";
Class theClass = NSClassFromString(classNameStr);
id myObject = [[theClass alloc] init];
Run Code Online (Sandbox Code Playgroud)

您还可以使用objc运行时接口(例如objc_getClass(const char* name),objc_lookUpClass(const char* name)).前者不会加载一个类.后者会.在某些情况下,这个选项可能是件好事.


Ish*_*shu 6

id a = [[NSClassFromString(@"MyExampleClass") alloc] init];
Run Code Online (Sandbox Code Playgroud)

使用这个,这将给你你想要的.