【发布时间】:2009-05-29 20:23:46
【问题描述】:
是否可以创建一个以 NSString 的值命名的对象?如果有,怎么做?
【问题讨论】:
标签: objective-c cocoa oop nsstring
是否可以创建一个以 NSString 的值命名的对象?如果有,怎么做?
【问题讨论】:
标签: objective-c cocoa oop nsstring
试试这个:
Class theClass = NSClassFromString(someString);
id object = [[theClass alloc] init];
【讨论】:
如果你的意思是字符串指定了类名,那么可以很容易地使用 NSClassFromString 函数来查找适当的类“工厂”对象:
NSString* myClassName = @"NSNumber";
id myNewObject = [[NSClassFromString(myClassName) alloc] init];
// myNewObject is an NSNumber...
这个例子是人为的,但你明白了。
【讨论】:
是的:
//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;;——在这种情况下无害,但如果我这样做会困扰我,主要是因为它是在其他一些情况下并非无害。)
【讨论】: