共享常量定义变量的标准是什么

时间:2013-02-22 23:42:28

标签: objective-c static constants

正如标题所说 - 在Java中,我只是让一个类定义常量,然后将它们导入到将要使用它们的类中。在Objective-C中是否以相同的方式完成?

为了说清楚,我想

#define variable 1
#define variable 2.0

在不同的类中使用相同的常量。

3 个答案:

答案 0 :(得分:3)

将宏放在头文件中,并在需要访问时将#include#import放在头文件中。

答案 1 :(得分:3)

使用宏还有另一种选择。您可以将它们定义为全局变量。

在Constants.h中:

extern int variableX;
extern float variableY;

在Constants.m中(通常在导入之后,在任何其他代码之前):

int variableX = 1;
float variableY = 2.0f;

这种方法相对于宏有一些优点:

  1. 客户不需要查看该值。
  2. 如果值发生变化,则无需重新编译导入Constants.h的每个文件。
  3. 可以通过多种方式初始化值,而不仅仅是文字。
  4. 使用变量时键入安全性和编译器检查。

答案 2 :(得分:1)

您的示例是使用C预处理器宏。这与Objective-C的工作方式与支持C风格预处理器宏的任何其他环境相同:将它们粘贴到共享标头中,并#import#include

虽然这完全没问题,但你特别询问与类相关的常量和Objective-C。在Objective-C中,您经常会看到常量的NSStrings(例如通知名称或字典键)以及属于这样定义的特定类的类似常量:

在标题(.h)中:

extern NSString * const LibraryEntryDidUpdateNotification;
extern const NSUInteger LibraryEntryDefaultStarRating;

@interface LibraryEntry : NSObject

...

在实施(.m)中:

NSString * const LibraryEntryDidUpdateNotification = @"LibraryEntryDidUpdateNotification";
const NSUInteger LibraryEntryDefaultStarRating = 3;

@implementation LibraryEntry

...

这就是Apple在现代框架中如何做到这一点,以及许多第三方开发人员如何做到这一点。在我看来,重构比预处理器宏更容易(例如,当使用Xcode中的“重构”按钮重命名一个类时,同样容易使用这些常量),但是常量的预处理器宏也有它们的好处。

如果您有兴趣,请参阅herehere以更深入地讨论该主题。