创建以NSString的值命名的对象 - 是否可能?

时间:2009-05-29 20:23:46

标签: objective-c cocoa oop nsstring

是否可以创建以NSString值命名的对象?如果是这样,怎么样?

3 个答案:

答案 0 :(得分:3)

试试这个:

Class theClass = NSClassFromString(someString);
id object = [[theClass alloc] init];

答案 1 :(得分:1)

如果你的意思是字符串指定了类名,那么使用NSClassFromString函数来查找相应的类“factory”对象很容易做到这一点:

NSString* myClassName = @"NSNumber";
id myNewObject = [[NSClassFromString(myClassName) alloc] init];

// myNewObject is an NSNumber...

这个例子是人为的,但你明白了。

答案 2 :(得分:1)

是:

//In your header
extern NSString *FrobnitzerCalibrationHigh;
extern NSString *FrobnitzerCalibrationMedium;
extern NSString *FrobnitzerCalibrationLow;

//In your implementation
NSString *FrobnitzerCalibrationHigh = @"FrobnitzerCalibrationHigh";
NSString *FrobnitzerCalibrationMedium = @"FrobnitzerCalibrationMedium";
NSString *FrobnitzerCalibrationLow = @"FrobnitzerCalibrationLow";

您可以制作几个宏并将它们放在前缀标题中:

//Semicolons intentionally omitted (see below)
#define DECLARE_STRING_CONSTANT(name) extern NSString *name
#define DEFINE_STRING_CONSTANT(name) NSString *name = @#name

然后在类标题和实现中使用它们:

//In your header
DECLARE_STRING_CONSTANT(FrobnitzerCalibrationHigh);
DECLARE_STRING_CONSTANT(FrobnitzerCalibrationMedium);
DECLARE_STRING_CONSTANT(FrobnitzerCalibrationLow);

//In your implementation
DEFINE_STRING_CONSTANT(FrobnitzerCalibrationHigh);
DEFINE_STRING_CONSTANT(FrobnitzerCalibrationMedium);
DEFINE_STRING_CONSTANT(FrobnitzerCalibrationLow);

(宏省略了分号,因为它们的用法将提供它们。如果宏也有分号,扩展将是extern NSString *FrobnitzerCalibrationHigh;; - 在这种情况下无害,但如果我这样做会对我造成伤害,主要是因为在其他一些情况下它并不是无害的。)