Create objective-c class instance by name?
是否可以按名称创建类的实例?类似:
1 2 3 | NSString* className = @"Car"; id* p = [Magic createClassByName:className]; [p turnOnEngine]; |
我不知道这在客观C中是否可行,但似乎是,
1 | id object = [[NSClassFromString(@"NameofClass") alloc] init]; |
例如,在你的
1 | @property Class NameOfClass; |
然后在你的
1 | id object = [[NameOfClass alloc] init]; |
如果你的类的名字mistyped或如果它是不是你的存在,让一个错误在编译的时间。我认为这也是清洁的代码。
如果你正在使用Objective - C的(没有
1 2 3 4 5 6 | #import <objc/runtime.h> //Declaration in the above named file id objc_getClass(const char* name); //Usage id c = objc_getClass("Object"); [ [ c alloc ] free ]; |
在Objective-C中(或unnamed 1.0版):你将使用以下
1 2 3 4 5 6 7 | #import <objc/objc-api.h> //Declaration within the above named file Class objc_get_class( const char* name); //Usage Class cls = objc_get_class("Test" ); id obj = class_create_instance( cls ); [ obj free ]; |
i避风港’t
1 2 3 4 5 6 7 8 9 10 11 12 | @interface Magic : NSObject + (id)createInstanceOfClass:(Class)classe; @end @implementation Magic + (id)createInstanceOfClass:(Class)classe { return [[classe alloc] init]; } @end |
然后使用它:
1 2 | Car *car = [Magic createInstanceOfClass:[Car class]]; [car engineTurnOn]; |