我正在处理对象工厂以跟踪对象的一个小集合。这些对象可以是不同的类型,但它们都会响应createInstance
和reset
。这些对象不能从公共基类派生,因为它们中的一些必须从内置的可可类派生,如NSView
和NSWindowController
。如何将类名作为参数传递给可可中的对象工厂?
我希望能够通过传递所需的类名来我厂创建任何合适的对象的实例如下:
myClass * variable = [factory makeObjectOfClass:myClass];
的makeObjectOfClass:
方法会是这个样子:
- (id)makeObjectOfClass:(CLASSNAME)className
{
assert([className instancesRespondToSelector:@selector(reset)]);
id newInstance = [className createInstance];
[managedObjects addObject:newInstance];
return newInstance;
}
有没有办法将类名传递给方法,正如我上面makeObjectOfClass:
的(CLASSNAME)className
参数所做的那样?
为了完整起见,这里是我为什么要管理所有对象的原因。我希望能够通过拨打[factory reset];
来一次性重置一组完整的对象。
- (void)reset
{
[managedObjects makeObjectsPerformSelector:@selector(reset)];
}
我之间迈克尔·蔡的和马特·加拉格尔的答案撕裂。我提高了两个,因为都提到了'Class'的用法,这正是我所期待的。最后,我选择了马特的答案,因为它强调了“类”在ClassFromString,这是第一个编辑之前提到使用“类”的。 – 2008-11-24 22:31:32
@Ned Batchelder:谢谢你改变标签。出于某种原因,“的ObjectiveC”显示更多的项目(约200),比当我添加标签的问题出现标签的下拉列表“的ObjectiveC”,但我现在看到“的ObjectiveC”已经重定向以“Objective-C的” – 2008-11-24 23:08:48
@eJames:你的问题显示-reset发送到实例,而不是类对象,所以我认为[ACLASS respondsToSelector:@selector(复位)]在马特加拉格尔的答案不正确。 – 2008-11-25 00:51:33