C++ 使用c+有什么缺点吗+;对于objective-c中的常数 //头文件 #进口 外部UIColor*常量颜色\u背景; //实现文件 #导入“Constants.h” UIColor*const COLOR_BACKGROUND=[UIColor greenColor];

C++ 使用c+有什么缺点吗+;对于objective-c中的常数 //头文件 #进口 外部UIColor*常量颜色\u背景; //实现文件 #导入“Constants.h” UIColor*const COLOR_BACKGROUND=[UIColor greenColor];,c++,objective-c,C++,Objective C,如果您在.m文件中尝试此操作,您将得到一个错误,因为它不是编译时常量。将实现文件更改为.mm可以解决此问题。 但是我是否应该注意到一些怪癖(我对C++是一无所知的,我没有看到任何人这样做)?p> 反对这一点的论据将基于风格。在功能上,它会像你所期望的那样工作,并且存在的陷阱与你正在编程纯C++代码时的情况相同…p> 你应该注意的怪癖:Objective-C诸神的愤怒,以及任何了解Objective-C的上级的愤怒 请允许我推荐[CIColor colorWithString:(NSString*

如果您在.m文件中尝试此操作,您将得到一个错误,因为它不是编译时常量。将实现文件更改为.mm可以解决此问题。
但是我是否应该注意到一些怪癖(我对C++是一无所知的,我没有看到任何人这样做)?p> 反对这一点的论据将基于风格。在功能上,它会像你所期望的那样工作,并且存在的陷阱与你正在编程纯C++代码时的情况相同…p> 你应该注意的怪癖:Objective-C诸神的愤怒,以及任何了解Objective-C的上级的愤怒

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

像这样:

//header-file
#import <Foundation/Foundation.h>
extern UIColor *const COLOR_BACKGROUND;

//implementation-file
#import "Constants.h"
UIColor *const COLOR_BACKGROUND= [UIColor greenColor];

我认为有两个缺点:

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

2.Objective-C++本身 如果使用此样式,则必须使用Objective-C++。当与其他开发人员一起工作或使用其他地方的代码时,不使用(纯)Objective-C是很尴尬和容易出错的。这两种语言之间有很多微妙的差异,它们中的许多会咬到你,特别是如果你对这两种语言都不是很有经验的话


<> P>当然有使用ObjuleC++的价值,但是我不会为了方便而使用它。

很多开发人员称ObjuleC++是“C++和Objul-C的不神圣的”。嗯,我想他们至少有一部分是对的。这是一个滑坡。首先,您只需要静态地分配一些对象。。。你知道的下一件事是,你正在使用模板,并在小巷中冒烟。你可以这样做(就像我过去所做的那样):
[[UIColor class]performSelector:NSSelectorFromString(COLOR\u STRING)]
..@jeffamaphone:如果我调试,我会得到一个this(CoreFoundation`\u HALT:0x1686880:int3 0x1686881:nopw%cs:(.eax,%eax)然后它继续或崩溃,如果您在调试窗口中执行了
po$eax
,您应该会得到异常。请确保您位于堆栈顶部(底部?)的框架中。@jeffamaphone如果这样做,我会得到“$0=23619712[无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;
}