//header-file
#import <Foundation/Foundation.h>
extern UIColor *const COLOR_BACKGROUND;
//implementation-file
#import "Constants.h"
UIColor *const COLOR_BACKGROUND= [UIColor greenColor];如果您尝试对.m文件执行此操作,将会得到一个错误,因为它不是编译时常量。将实现文件更改为.mm可以解决此问题。但是有没有什么我应该注意的怪癖(我对c++一无所知,我也没看到有人这么做)?
发布于 2013-07-08 22:31:17
在我看来有两个缺点:
1.初始化顺序
C++中静态初始化器的一个众所周知的问题是初始化顺序。在处理颜色或字体时,这可能不是什么大问题。但是一旦涉及到你自己的对象,当一个实例的构造函数访问另一个静态对象时,它可能很快就会变得一团糟。
2. Objective-C++本身
如果你使用这种风格,你将被绑定到Objective-C++。不使用(纯) Objective-C在与其他开发人员合作或使用来自其他地方的代码时是笨拙和容易出错的。这两种语言之间有许多细微的差异,其中许多都会咬你,特别是如果你对这两种语言都不是很有经验的话。
在某些情况下,使用Objective-C++是值得的,但我不会仅仅为了方便而使用它。
发布于 2013-07-08 22:01:29
反对这一点的论据将基于风格。在功能上,它将按照您的预期工作,并且存在的陷阱与您编写纯C++代码时相同……
你应该知道: Objective-C之神的愤怒,以及任何了解Objective-C的上级的愤怒。
请注意,UIColor类有一个initWithCIColor方法。您可以使用此行逻辑来创建UIColors的局部常量变量,并安抚Objective-C主宰。
如下所示:
//.h
extern NSString *const COLOR_STRING;
//.m
NSString *const COLOR_STRING = @"SOME_COLOR";
@implementation ModalDelegate
- (id)init
{
CIColor *const MY_COLOR = [CIColor colorWithString:COLOR_STRING];//Can easily be made a UIColor instead, though unfortunately there is no "UIColor fromString" method.
self = [super init];
return self;
}https://stackoverflow.com/questions/17527427
复制相似问题