0

使用目标 c ,我有 2 个使用硬件的类,并用c +objC. 项目中的其他类是目标 c,它们创建这些类的实例。

我的问题 。

可以说我有classA.mclassB.m。他们都有一个需要相同的整数 const 说:const int numOfSamples=7;

我正在寻找创建一些配置文件的最佳解决方案,该文件将包含所有这些 const 变量,A 和 B 都可以看到它们。我知道一些方法,但我想知道正确的做法是什么。

  1. 我想知道我是否可以创建一个 :configuration.m并将它们写入其中。
  2. 使用singleton包含所有全局变量的文件。

数字 1 在我看来是最好的,但我应该怎么做呢?

谢谢。

4

2 回答 2

1

要使方法 1 起作用,您需要定义两个文件:

  1. 声明所有常量的头文件;

  2. 定义和初始化常量的 .m 文件。

在您的示例中:

/* .h file */
extern const int numOfSamples;

/* .m or .c file */
const int numOfSamples = 7;

然后,在需要这些常量的每个其他文件中包含 .h 标头。注意extern关键字,这将声明变量而不定义;这样,您可以多次包含 .h 文件而不会出现重复符号错误。

编辑:

我建议的方法是在 C 程序中处理全局变量的正确方法。

现在,如果全局变量是好事还是坏事,那是一个更长的故事。

一般来说,全局变量是棘手的,并且与 40 年来在程序中更好地封装(也称为信息隐藏)数据和行为的努力背道而驰(参见“关于将系统分解为模块时使用的标准”,David Parnas, 1972)。

为了进一步解释这一点,问题的一个方面正是您在评论中提到的:一个模块更改全局变量的值并因此影响程序的整体行为的可能性。这显然很糟糕,并导致无法控制的副作用(在任何非平凡的程序中)。

在你的情况下,我认为事情有点不同,因为你在谈论“配置”和“常量”值。这是与一般情况完全不同的情况,我认为您可以安全地使用 consts 的头文件来实现这一目标。

也就是说,您了解配置的整个主题通常是一个巨大的主题。例如,您可能需要动态更改程序配置的机制;在这种情况下,常量变量标题方法将不正确。或者,您的程序配置可能取决于某个远程系统的状态(想象一下:您已登录与未登录)。

我不能保证使用头文件是您情况的最佳方法,但我希望上述讨论和我给您的示例可以帮助您解决这个问题。

于 2012-12-18T10:53:53.380 回答
0

我认为最好的方法是使用plist包含所有配置值的文件。

如果您的配置值很少,则可以使用该Info.plist文件。

于 2012-12-18T10:53:37.793 回答