目标C:给定一个类ID,我可以检查这个类实现某种协议?还是有一定的选择?

StackOverflow https://stackoverflow.com/questions/2344672

我想使用此为对象工厂:给定一个字符串,则创建一类,并且如果 此类支持的协议(具有Create()方法),然后ALLOC类和呼叫 创建

有帮助吗?

解决方案

Class klass = NSClassFromString(classname);
if ([klass instancesRespondToSelector:@selector(create)]) {
  [[klass alloc] create];
}

我五月然而,指出可怕的Objective-C究竟有多少这样做上述规则你打破?例如,你不应该调用一个分配的但不初始化实例方法。 Xcode的静态分析器会给你各种警告的约内存泄漏。

一个更好的选择是这样的:

[[[klass alloc] init] create];

但你似乎暗示着你不想调用初始化。

您可以考虑一类方法:[klass create],这将返回klass的非国有实例。然后你只是调用它之前检查[klass respondsToSelector:@selector(create)]

其他提示

NSString *className; //assume this exists
Class class = NSClassFromString(className);
if ([class conformsToProtocol:@protocol(SomeProtocol)]) {
    id instance = [[class alloc] init];
    [instance create];
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top