我是一名来自iPhone的.NET开发人员,我现在仍然感觉很好。
我已经达到了一点,在.NET中我通常会使用命名常量来提高可读性。 我知道iPhone开发中也有一个const关键字,但我见过的大多数例子在这个例子中使用#define。
两种实现之间有什么真正的区别? 奖金问题:他们/不应该如何以及何时使用它们?
答案 0 :(得分:2)
在SO上有很多其他问题讨论如何在Objective-C中声明常量和行为,你应该看看以下内容:
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
常量可用于切换器状态,顺便说一句。