在.h文件中使用静态NSString?

时间:2013-09-19 16:24:50

标签: objective-c c

我有一个配置.h文件,我可以通过将其导入到其他类中来访问它们。

.h课程中,我有:

static NSString *const charIdList[] =
{

    @"1", @"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"AA",@"BB",@"CC",@"DD",@"EE",@"FF",@"GG",@"HH",@"II",@"J",@"K"
};

我在程序运行期间在其他类中使用它。 我应该在这里使用静态变量吗?或者只使用一个字符串会安全吗? 在这种情况下NSString的范围是什么 - 如果它不是static

1 个答案:

答案 0 :(得分:4)

您需要了解在头文件中定义static变量的效果:当发生这种情况时,包含您的标头的每个翻译单元 1 将获得自己的副本charIdList数组,无论您是否使用它。

更好的方法是将此数组建立为单例,或者如果它确实是常量,将其定义为全局,并在标头 2 中为其添加extern

.h文件:

extern NSString *const charIdList[];
extern size_t charIdListLength;

.m文件:

NSString *const charIdList[] = {
    @"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"AA",@"BB",@"CC",@"DD",@"EE",@"FF",@"GG",@"HH",@"II",@"J",@"K"
};
size_t charIdListLength = sizeof(charIdList)/sizeof(charIdList[0]);

<小时/> 1 “翻译单位”是.c.m文件的精美名称。

2 注意如何分别定义数组的长度;否则,划分sizeof s的诀窍是行不通的。