在运行时修改对象类型

时间:2012-12-09 19:08:54

标签: objective-c

在Objective C中是否可以在没有编译器抱怨的情况下在运行时修改对象类型?

e.g。

id object;

在init方法中

initWithType:(someEnumType) type

然后根据类型将对象设置为类类型。

如果没有编译器标记对象未声明someMethod的错误,该如何完成?

1 个答案:

答案 0 :(得分:1)

执行此类操作的最常见方法是使用工厂方法,而不是初始化程序:

typedef enum {
    etString,
    etNumber
} EnumType;

@implementation MyFactory

+(id)makeNewObjectWithType:(EnumType)et {
    id res;
    switch (et) {
        case etString:
            res = [NSString string];
            break;
        case etNumber:
            res = [NSNumber numberWithInt:12345];
            break;
        default:
            res = nil;
            break;
    }
    return res;
}

@end