Я работаю на фабрике объектов, чтобы отслеживать небольшую коллекцию объектов. Объекты могут быть разных типов, но все они будут реагировать на 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;
}
Есть ли способ передать имя класса методу, как я сделал с аргументом (CLASSNAME)className
для makeObjectOfClass:
выше?
Ради полноты, вот почему я хочу управлять всеми объектами. Я хочу иметь возможность сбросить полный набор объектов за один раз, вызвав [factory reset];
.
- (void)reset
{
[managedObjects makeObjectsPerformSelector:@selector(reset)];
}