按名称定义和转换 class
Defining and casting a class by its name
我有这些行
MyClassA *object = [[MyClassA alloc] init];
MyClassB *object = [[MyClassB alloc] init];
MyClassC *object = [[MyClassC alloc] init];
...
我想转换为通用方法以从 class 名称创建对象。
假设我有这个
NSString *className = @"MyClassA"
如何创建这条线
MyClassA *object = [[MyClassA alloc] init];
这部分[[MyClassA alloc] init]
很简单,因为我能做到
[[NSClassFromString(className) alloc] init]
但是
MyClassA *object
部分?
??????????? = [[NSClassFromString(className) alloc] init];
我在问号上加了什么?
id object
,但您将无法 "cast" 使用字符串。
如果您随后需要对该 id 对象调用方法,请执行以下操作:
if ([object respondsToSelector:@selector(myMethod:)])
[object performSelector:@selector(myMethod:) withObject:@"param1"];
首先检查对象是否响应该选择器并调用它。
我不知道您要解决什么问题,但在使用此方法之前,请评估不涉及我刚才描述的内容的替代解决方案:)
最简单和最通用的形式:
id object = [[NSClassFromString(className) alloc] init];
但实际上,您应该通过创建描述这些 类 将提供的常见内容的协议来提供更多信息和形式,因此您将拥有类似的东西:
id < MyClass > object = [[NSClassFromString(className) alloc] init];
和
@protocol MyClass < NSObject >
// method definitions supported by all classes
@end
(您的 MyClassA/B/C 将实施该协议)
我有这些行
MyClassA *object = [[MyClassA alloc] init];
MyClassB *object = [[MyClassB alloc] init];
MyClassC *object = [[MyClassC alloc] init];
...
我想转换为通用方法以从 class 名称创建对象。
假设我有这个
NSString *className = @"MyClassA"
如何创建这条线
MyClassA *object = [[MyClassA alloc] init];
这部分[[MyClassA alloc] init]
很简单,因为我能做到
[[NSClassFromString(className) alloc] init]
但是
MyClassA *object
部分?
??????????? = [[NSClassFromString(className) alloc] init];
我在问号上加了什么?
id object
,但您将无法 "cast" 使用字符串。
如果您随后需要对该 id 对象调用方法,请执行以下操作:
if ([object respondsToSelector:@selector(myMethod:)])
[object performSelector:@selector(myMethod:) withObject:@"param1"];
首先检查对象是否响应该选择器并调用它。
我不知道您要解决什么问题,但在使用此方法之前,请评估不涉及我刚才描述的内容的替代解决方案:)
最简单和最通用的形式:
id object = [[NSClassFromString(className) alloc] init];
但实际上,您应该通过创建描述这些 类 将提供的常见内容的协议来提供更多信息和形式,因此您将拥有类似的东西:
id < MyClass > object = [[NSClassFromString(className) alloc] init];
和
@protocol MyClass < NSObject >
// method definitions supported by all classes
@end
(您的 MyClassA/B/C 将实施该协议)