如何在objective-C中定义非字符串常量?

时间:2010-10-25 15:39:07

标签: iphone objective-c constants

我可以像这样定义全局字符串:

// .h
extern NSString * const myString;

// .m
NSString * const myString = @"String";

现在我需要类似地定义UIcolor,我该怎么做?

我正在尝试:

// .h
extern UIColor * const myColor;

// .m
UIColor * const myColor = [UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:1.0];

但它不起作用,我得到error: initializer element is not constant

由于

3 个答案:

答案 0 :(得分:5)

您无法使用方法调用(或任何不是编译时常量的表达式)初始化全局变量。它适用于您的@"String"示例,因为它是一个常量表达式。不需要调用代码来评估它。

答案 1 :(得分:3)

不幸的是,字符串是一种特殊情况。对于任何其他类型的对象,您必须首先将其设置为nil,然后在启动时提供值。执行此操作的好地方是在相关类的初始化方法中(不要与实例init方法混淆),保证在实例化类之前至少调用一次。 (注意我说“至少一次”;它可能会再次调用,具体取决于类层次结构,因此在为它们分配新值之前检查你的全局变量是否为零。)

答案 2 :(得分:0)

有一件事是:

static UIColor *DefaultColor = nil;

+ (void) initialize {
    static BOOL initiliazed = NO;
    if (initialized)
        return;
    DefaultColor = [UIColor blackColor];
    initialized = YES;
}

但是,如果你只想初始化一种颜色,那当然很难看。