我有一个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常量,虽然这有效,但似乎比它需要的更复杂。有更简单的方法吗?
答案 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)
答案很简单。它可用于NSArray
和NSDictionary
等。
//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;
}