0

我正在编写一个 iPhone 应用程序,并将我的常量安排在 Constants.h 和 Constants.m 文件中,正如这个问题中所推荐的:Objective-C 中的常量

我的问题是,如果我在 Constants.h 中定义一个 typedef 枚举,并想在我的一个类 .h 文件中声明该 typedef 枚举的属性,那么实现它的正确方法是什么?我是否需要将 typedef 枚举移出 Constants.h 和 classes .h 文件?似乎违背了拥有全局常量文件的目的......

4

2 回答 2

8

我对这些范围类型问题的回答是将声明限制在所需的最小范围内。

如果您在实现中只需要枚举,则将声明放在 .m 中。如果仅接口需要枚举,则将声明放在接口的 .h 中。如果多个独立接口需要枚举,那么我会求助于将它放在全局 .h 文件中。

我这样做有两个原因。1)限制范围减少合并。2) 限制范围减少了受更改影响的文件数量。

当您的所有 typedef 都在一个文件中时,任何时候两个开发人员更新任何类型时,其中一个都必须在提交时合并。我已经处理了足够多的错误,这些错误是由我生活中的错误合并造成的。我尽量避免它们。

当您的程序中的每个文件都包含一个文件时,对该文件的任何更改都会影响程序中的每个文件。我已经发布了在没有任何提交的模块中有错误的生产代码。对全局包含的更改导致了一个没有人预料到并且没有人测试过的问题,因为它看起来像模块未被触及。

于 2012-05-14T04:37:43.233 回答
3

Atypedef创建一个可以用作类型的名称,例如int,BOOL或任何其他类型:它是类型 _def_inition。编译器只需要能够看到typedef您想要声明该类型变量的任何位置。这意味着您需要做的就是将您的 Constants.h 导入到您要使用该类型的文件中:

// Constants.h
typedef unsigned int Nimitz;

#import "Constants.h"

@interface Excelsior : NSObject

@property (assign) Nimitz numPlanes;

@end
于 2012-05-14T03:38:45.000 回答