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

Objective c 在.h文件中使用静态NSString?,objective-c,c,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" }; 在程序运行期间,我在其他类中使用它。 我应该在这里使用静态变量吗?或者只使用字符串是安全的? 在这种

我有一个配置
.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
的作用域是什么?如果它不是
静态的

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

更好的方法是将此数组建立为单例,或者如果它确实是常量,则将其定义为全局数组,并在header2中为其添加一个
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注意需要如何单独定义数组的长度;否则,划分
大小的技巧将不起作用。

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

更好的方法是将此数组建立为单例,或者如果它确实是常量,则将其定义为全局数组,并在header2中为其添加一个
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注意需要如何单独定义数组的长度;否则,将
大小划分为
s的诀窍将不起作用。

哇,回答得好,非常感谢,但我不明白为什么要设置它的大小?我可以在需要时检查是否不需要?顺便说一句:每次导入该.h文件时,我都会创建该nsstring,但是如果它不是静态的,那么现在它的作用域是什么呢?@Curnelious no,因为声明为
extn
的数组不会给出正确的大小。
sizeof
运算符在编译时求值,而
extern
引用在链接时解析,因此
sizeof
的除法返回为空。当您声明
charIdList
static
时,范围是翻译单位;当你把它声明为
extern
,它是全局的。哇,很好的回答,非常感谢,但我不明白为什么我要设置它的大小?我可以在需要时检查是否不需要?顺便说一句:每次导入该.h文件时,我都会创建该nsstring,但是如果它不是静态的,那么现在它的作用域是什么呢?@Curnelious no,因为声明为
extn
的数组不会给出正确的大小。
sizeof
运算符在编译时求值,而
extern
引用在链接时解析,因此
sizeof
的除法返回为空。当您声明
charIdList
static
时,范围是翻译单位;当您声明它时,它是全局的。