目标C:给定一个类ID,我可以检查这个类实现某种协议?还是有一定的选择?
-
23-09-2019 - |
题
我想使用此为对象工厂:给定一个字符串,则创建一类,并且如果 此类支持的协议(具有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];
}
不隶属于 StackOverflow