UIColor,UIFont等的外部常量

时间:2011-08-19 22:57:48

标签: objective-c cocoa-touch cocoa extern

我有一个constants.m文件,它是许多程序常量的集中集合。要设置颜色,我这样做:

@implementation UIColor (UIColor_Constants) 

+(UIColor *) defaultResultTableBackgroundColor{
    //return [[UIColor colorWithRed:0.6f green:0.004f blue:0.0f alpha:1.0f] retain];
    return [[UIColor colorWithRed:0.1f green:0.004f blue:0.3f alpha:0.3f] retain];
}

+(UIColor *) defaultResultHeaderBackgroundColor{
    return [[UIColor clearColor] retain];
}

@end

并且在constants.h中我有

@interface UIColor (UIColor_Constants) 

+(UIColor *) defaultResultTableBackgroundColor;
+(UIColor *) defaultResultHeaderBackgroundColor;

@end

然后只使用[UIColor defaultResultTableBackgroundColor]我要引用此常量。

我想要一些其他的UIColor和UIFont常量,虽然这有效,但似乎比它需要的更复杂。有更简单的方法吗?

5 个答案:

答案 0 :(得分:9)

我使用常量文件用于相同的目的。我没有设置整个接口和实现文件,而是将常量文件创建为标题(.h)文件。然后,我定义了我想要使用的颜色,例如:

#define globalColor [UIColor colorWithRed:0.1f green:0.004f blue:0.3f alpha:0.3f]

然后,只要您使用globalColor,就像输入已定义的代码一样。

答案 1 :(得分:6)

我其实也喜欢这种方式。一个问题:为什么你保留了uicolor? 这非常危险。它很可能会犯错并造成内存泄漏。

答案 2 :(得分:6)

这是一篇很好的解读,解释了目标C中的常量:

What is the best way to create constants in Objective-C

简短回答:您正在以最佳方式处理此问题。

不建议使用宏。正如有人提到的,您可以#define宏来处理您的颜色。这基本上告诉预处理器在代码上运行查找和替换。这种方法有许多缺点,包括范围和类型。 Apple明确建议不要使用这些类型的“常量”:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingIvarsAndTypes.html

也可以创建一个常量:

(在标题中,文件范围)

extern UIColor *  const COLOR_LIGHT_BLUE;

(在您的实现中,文件范围)

UIColor* const COLOR_LIGHT_BLUE = [[UIColor alloc] initWithRed:21.0f/255 green:180.0f/255  blue:1 alpha:1];

当然,您可以在前缀标题中#import此标头以节省更多输入。但最终,它与你正在做的事情相比并没有太大的改进。

答案 3 :(得分:2)

您创建一个常量头文件,其中包含您的所有颜色和/或字体:

// Define a convenient macro for example
#define HEXCOLOR(c) [UIColor colorWithRed:((c>>16)&0xFF)/255.0 \
                                    green:((c>>8)&0xFF)/255.0 \
                                     blue:c&0xFF/255.0 \
                                    alpha:0xFF/255.0]

// Then define your constants
#define DefaultResultTableBackgroundColor HEXCOLOR(0x151515)
// etc.

答案 4 :(得分:0)

答案很简单。它可用于NSArrayNSDictionary等。

//Font
static UIFont *titleFont() {
    static UIFont *font = nil;
    if (!font) {
        font = [UIFont systemFontOfSize:25 weight:UIFontWeightHeavy];
    }
    return font;
}

//Color
static UIColor *prettyPurpleColor() {
    static UIColor *color = nil;
    if (!color) {
        color = [[UIColor purpleColor] colorWithAlphaComponent:0.35];
    }
    return color;
}