const关键字在iPhone和.NET之间有何不同?

时间:2010-12-07 17:32:15

标签: .net iphone objective-c coding-style

我是一名来自iPhone的.NET开发人员,我现在仍然感觉很好。

我已经达到了一点,在.NET中我通常会使用命名常量来提高可读性。 我知道iPhone开发中也有一个const关键字,但我见过的大多数例子在这个例子中使用#define。

两种实现之间有什么真正的区别? 奖金问题:他们/不应该如何以及何时使用它们?

2 个答案:

答案 0 :(得分:2)

在SO上有很多其他问题讨论如何在Objective-C中声明常量和行为,你应该看看以下内容:

Constants in Objective-C

Objective-C “const” question

Significance of const keyword positioning in variable declarations

为了与C#进行比较和对比,我要指出Obj-C中的const与C语言中的#define基本相同(Obj-C实际上是C的超集)。在Obj-C中,常量在全局范围内声明,并且必须初始化为编译时已知的值。 Objective-C不支持常量作为类成员。在C#中,常量始终是类(或结构)的成员,并且还必须使用编译时已知的值进行初始化。 C##if不允许值与定义的符号相关联,而是用于允许选择条件编译路径(使用#else#define),这是完全不同的

关于使用#defined声明常量,我个人尽可能避免这种情况。 const的值在编译时简单地替换为代码 - 并且可以在不同的上下文中以不同的方式进行解释。也可能引入名称冲突,这可能导致意外重新定义值。我的建议是尽可能使用#define,并且只在必要时使用{{1}}。

答案 1 :(得分:1)

#defines是在最终代码中替换的预处理器宏。因此,它们具有一次定义的值,可以免费访问。另一方面,const只是静态地分配编译器处理的变量。因此,对于大多数任务,我会(或者更确切地说)使用#define而不是const 只有#defined'd常量可用于切换器状态,顺便说一句。