【问题标题】:Creating object named after the value of an NSString - is it possible?创建以 NSString 的值命名的对象 - 可能吗?
【发布时间】:2009-05-29 20:23:46
【问题描述】:

是否可以创建一个以 NSString 的值命名的对象?如果有,怎么做?

【问题讨论】:

    标签: objective-c cocoa oop nsstring


    【解决方案1】:

    试试这个:

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

    【讨论】:

      【解决方案2】:

      如果你的意思是字符串指定了类名,那么可以很容易地使用 NSClassFromString 函数来查找适当的类“工厂”对象:

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

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

      【讨论】:

        【解决方案3】:

        是的:

        //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;;——在这种情况下无害,但如果我这样做会困扰我,主要是因为它是在其他一些情况下并非无害。)

        【讨论】:

          猜你喜欢
          • 2020-07-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-26
          • 1970-01-01
          • 1970-01-01
          • 2011-04-29
          相关资源
          最近更新 更多