3

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

为了清楚起见,我想

#define variable 1
#define variable 2.0

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

4

3 回答 3

3

将宏放在头文件中,#include#import在您需要访问它们时放在该头文件中。

于 2013-02-22T23:45:07.940 回答
3

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

在常量.h 中:

extern int variableX;
extern float variableY;

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

int variableX = 1;
float variableY = 2.0f;

与宏相比,这种方法有几个优点:

  1. 客户不需要看到价值。
  2. 如果值更改,则无需重新编译导入 Constants.h 的每个文件。
  3. 这些值可以通过多种不同的方式进行初始化,而不仅仅是文字。
  4. 使用变量时的类型安全和编译器检查。
于 2013-02-23T00:06:49.773 回答
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 中的“重构”按钮重命名一个类时,同样很容易使用这些常量),但是常量的预处理宏也有其好处。

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

于 2013-02-23T00:12:39.407 回答