Objective-C中的动态即时类可能吗?

Coo*_*coa 21 xml iphone cocoa cocoa-touch objective-c

我的问题如下.我有一个简单地采用XML摘录和XPath的方法.然后它应该为我创建一个XML摘录的对象数组.这意味着如果我传递了以下XML:

<user>
  <name>Bob</name>
  <age>50</age>
</user>
Run Code Online (Sandbox Code Playgroud)

我的方法将实例化User类的实例,并使用键值编码来设置实例变量.这是相当直接的.唯一的问题是我来自大多数脚本背景,并试图看看是否可以将方法传递给类名.现在它正在做一个User类,后来它可能是一个Cars类,然后是一个Home类.在保持代码尽可能抽象的同时,从这种不同类型的方法实例化对象的最佳方法是什么?

cod*_*gic 54

要使用其名称实例化类,可以使用NSClassFromString:

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


Nat*_*ger 23

类是对象,可以像其他对象一样使用/发送.

要创建一个类对象:

Class classForElement = [MyUserClass class];
Run Code Online (Sandbox Code Playgroud)

实例化该类的对象

id newObject = [[classForElement alloc] init];
Run Code Online (Sandbox Code Playgroud)

如果类名与元素名不同,请创建一个以Class作为对象的字典,并将元素名作为键.

[NSDictionary dictionaryWithObjectsAndKeys:
                         [MyUserClass class], @"user", 
                         [MyCarClass class], @"car", 
                         [MyHomeClass class], @"home",
                          nil]];
Run Code Online (Sandbox Code Playgroud)