Jac*_*cko 38 protocols class objective-c objectfactory
我想将它用于对象工厂:给定一个字符串,创建一个Class,如果这个Class支持一个协议(使用Create()方法),那么分配该类并调用Create.
Chu*_*uck 268
NSString *className; //assume this exists
Class class = NSClassFromString(className);
if ([class conformsToProtocol:@protocol(SomeProtocol)]) {
id instance = [[class alloc] init];
[instance create];
}
Run Code Online (Sandbox Code Playgroud)
BJ *_*mer 15
Class klass = NSClassFromString(classname);
if ([klass instancesRespondToSelector:@selector(create)]) {
[[klass alloc] create];
}
Run Code Online (Sandbox Code Playgroud)
但是,我是否可以通过上述方法指出你破坏了多少糟糕的Objective-C规则?例如,您永远不应该在已分配但未初始化的实例上调用方法.Xcode静态分析器将为您提供有关内存泄漏的各种警告.
一个更好的选择是:
[[[klass alloc] init] create];
Run Code Online (Sandbox Code Playgroud)
但你似乎暗示你不想调用init.
你可以考虑一个类方法:[klass create]
它将返回一个非拥有的实例klass
.然后你[klass respondsToSelector:@selector(create)]
在调用它之前先检查一下.
归档时间: |
|
查看次数: |
20457 次 |
最近记录: |