使用目标c,我有2个使用硬件的类,并且是用c +objC
编写的。 项目中的其他类是目标 c,它们创建这些类的实例。
我的问题.
假设我有classA.m
和classB.m
。 它们都有一个整数常量,需要相同const int numOfSamples=7;
说:
我正在寻找创建一些配置文件的最佳解决方案,该文件将保存所有这些常量变量,A 和 B 都可以看到它们。 我知道一些方法,但我想知道正确的做法是什么。
我- 想知道我是否可以创建一个:
configuration.m
并将它们写入其中. - 使用包含所有全局变量的
singleton
文件。
在我看来,数字 1 是最好的,但我到底应该怎么做?
谢谢。
要使方法 1 正常工作,您需要定义两个文件:
-
一个头文件,您可以在其中声明所有常量;
-
定义和初始化常量的 .m 文件。
在您的示例中:
/* .h file */
extern const int numOfSamples;
/* .m or .c file */
const int numOfSamples = 7;
然后,在需要这些常量的所有其他文件中包含 .h 标头。请注意extern
关键字,这将声明变量而不定义;这样,您可以多次包含 .h 文件,而不会出现重复符号错误。
编辑:
我建议的方法是在 C 程序中处理全局变量的正确方法。
现在,如果全局变量是好事还是坏事,那么,这是一个更长的故事。
一般来说,全局变量是棘手的,并且违背了40年来在程序中更好地封装(又名信息隐藏)数据和行为的努力(参见"关于将系统分解为模块的标准",David Parnas,1972)。
为了进一步解释这一点,问题的一个方面正是您在评论中提到的:一个模块更改全局变量的值从而影响程序的整个行为的可能性。这被认为是不好的,并导致无法控制的副作用(在任何非平凡大小的程序中)。
在你的情况下,我认为事情有点不同,因为你在谈论"配置"和"常量"值。这是一个与一般情况完全不同的情况,我认为您可以安全地使用常量头文件来实现这一目标。
也就是说,您了解配置的整个主题通常是一个巨大的主题。 例如,您可能需要动态更改程序配置的机制; 在这种情况下,常量变量标头方法将不正确。或者,您的程序配置可能取决于某些远程系统的状态(想象一下:您已登录与未登录)。
我不能保证使用头文件是适合您的情况的最佳方法,但我希望上面的讨论和我给你的例子可以帮助你解决这个问题。
我认为最好的方法是使用包含所有配置值的plist
文件。
如果配置值很少,则可以使用Info.plist
文件。