在Objective-c中使用c ++作为常量是否有任何缺点

时间:2013-07-08 13:06:01

标签: c++ objective-c

//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 ++一无所知,我没有看到有人这样做)?

2 个答案:

答案 0 :(得分:2)

在我看来,有两个缺点:

1。初始化顺序

C ++中一个众所周知的静态初始化问题是初始化顺序。使用颜色或字体时,这可能没什么大不了的。但是当你自己的对象被涉及时,当一个实例的构造函数访问另一个静态对象时,它很快就会变得一团糟。

2。 Objective-C ++本身

如果使用此样式,则必须使用Objective-C ++。不使用(纯)当与其他开发人员一起工作或使用来自其他地方的代码时,Objective-C很容易出错且容易出错。这两种语言之间存在很多微妙的差异,其中很多都会让你感到厌烦,特别是如果你对这两种语言都不是很有经验的话。

有些情况下使用Objective-C ++是值得的,但我不会仅仅为了方便而使用它。

答案 1 :(得分:1)

反对此的论据将基于风格。从功能上讲,它会像你期望的那样工作,而且存在的缺陷与你编写纯C ++代码时的缺陷是一样的......

Quirk你应该知道:Objective-C众神的愤怒,以及任何了解Objective-C的上司。

我可以推荐[CIColor colorWithString:(NSString *)],并将常量颜色存储为NSString,作为完成您希望完成的目标的Objective-C方式。注意,UIColor类有一个initWithCIColor方法。您可以使用这一系列逻辑来创建UIColors的局部常量变量,并安抚Objective-C的霸主。

喜欢SO:

//.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;
}