在 Objective-C 中使用 C++ 作为常量有什么缺点吗?
is there any disadvantage using c++ for constants in 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++ 一无所知,我没有看到有人这样做(?
在我看来有两个缺点:
1. 初始化顺序
C++中静态初始值设定项的一个众所周知的问题是初始化顺序。在使用颜色或字体时,这可能没什么大不了的。但是,一旦涉及您自己的对象,当一个实例的构造函数访问另一个静态对象时,它很快就会变得一团糟。
2. 目标C++本身
如果你使用这种风格,你就会被绑定到Objective-C++。不使用(纯(Objective-C在与其他开发人员一起工作或使用其他地方的代码时是尴尬且容易出错的。两种语言之间有很多微妙的差异,其中许多会来咬你,特别是如果你对这两种语言都不是很有经验的话。
肯定有一些情况下,使用Objective-C++是值得的,但我不会仅仅为了方便而使用它。
反对这一点的论点将基于风格。 从功能上讲,它将按照您的预期工作,并且存在的陷阱与您编写纯C++代码时相同......
你应该注意的怪癖:目标-C之神的愤怒,以及任何了解目标-C的上级。
我可以推荐[CIColor colorWithString:(NSString *(],并将您的常量颜色存储为NSString,作为完成您希望完成的任务的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;
}
相关文章:
- #定义c-预处理器常量..我做错了什么
- 什么时候在C++中返回常量引用是个好主意
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- C 中的常量限定符和 C++ 中的常量限定符有什么区别?
- 常量公共成员有什么问题?
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 什么时候可以使用常量装饰调用我的重载函数?
- 使用什么代替"静态常量 TCHAR *"
- 常量字符*的性质是什么?
- 初始化不是整数的巨大常量多维数组的最佳方法是什么?
- 第二个常量在运算符函数中做什么?
- 常量成员和没有setter的私有成员之间有什么区别
- 什么是常量指针常量引用类型的参数?(const X* const & p)
- C++:允许临时对象调用非常量成员函数的设计理念是什么?
- 从模块导出全局常量的正确方法是什么?
- 有没有办法声明一个公共静态常量,该常量将使用 constexpr 在源文件中定义(有什么区别)?
- 有什么区别 - 常量 int x = 5000;和常量整数 x = 50'00;在C++?
- 出于什么原因,有必要将常量左值引用绑定到右值?
- 什么是可变常量?