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

标签 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

最佳答案

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

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

.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 的技巧将不起作用。

关于objective-c - 在 .h 文件中使用静态 NSString?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18900141/

相关文章:

objective-c - 您如何测量 iOS 线程的实际 on-CPU 时间?

c++ - 合并两个数组中的唯一元素

c - 如何在c中制作不同大小的数组?

c - 算术右移后出现意外结果

objective-c - Objective-C 对象声明中的 C++ 错误?

ios - 调整 UILabel 的大小不太有效

c - 为什么 printf() 在这段代码中打印出来?

c - 如何确定一组三角形中角最小的三角形

ios - Objective-C - 即使应用了 sqlite3_close(),sqlite3_open 内存泄漏

objective-c - 从一个 NSManagedObjectContext 保存的更改不会反射(reflect)在主 NSManagedObjectContext