首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在objective-c中使用c++作为常量有什么缺点吗?

在objective-c中使用c++作为常量有什么缺点吗?
EN

Stack Overflow用户
提问于 2013-07-08 21:06:01
回答 2查看 191关注 0票数 4
代码语言:javascript
复制
//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++一无所知,我也没看到有人这么做)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-08 22:31:17

在我看来有两个缺点:

1.初始化顺序

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

2. Objective-C++本身

如果你使用这种风格,你将被绑定到Objective-C++。不使用(纯) Objective-C在与其他开发人员合作或使用来自其他地方的代码时是笨拙和容易出错的。这两种语言之间有许多细微的差异,其中许多都会咬你,特别是如果你对这两种语言都不是很有经验的话。

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

票数 2
EN

Stack Overflow用户

发布于 2013-07-08 22:01:29

反对这一点的论据将基于风格。在功能上,它将按照您的预期工作,并且存在的陷阱与您编写纯C++代码时相同……

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

请注意,UIColor类有一个initWithCIColor方法。您可以使用此行逻辑来创建UIColors的局部常量变量,并安抚Objective-C主宰。

如下所示:

代码语言:javascript
复制
//.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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17527427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档