consts到许多类的配置文件

时间:2012-12-18 10:48:02

标签: objective-c c

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

我的问题。

假设我有classA.mclassB.m。它们都有一个整数const,需要说明相同:const int numOfSamples=7;

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

  1. 我想知道我是否可以创建一个:configuration.m并将其写入其中。
  2. 使用包含所有全局变量的singleton文件。
  3. 在我看来,1号是最好的,但我该怎么办呢?

    感谢。

2 个答案:

答案 0 :(得分:1)

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

  1. 一个头文件,您可以在其中声明所有常量;

  2. .m文件,其中定义和初始化常量。

  3. 在你的例子中:

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

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

    编辑:

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

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

    一般来说,全局变量是棘手的,并且反对40年来努力在程序中更好地封装(也就是信息隐藏)数据和行为(参见"On the Criteria to Be Used in Decomposing Systems Into Modules",David Parnas,1972)。

    为了进一步解释这个问题,问题的一个方面正是你在评论中提到的:一个模块改变全局变量值的可能性,从而影响程序的整个行为。这被认为是不好的,并导致无法控制的副作用(在任何非平凡大小的程序中)。

    在你的情况下,我认为事情有点不同,因为你在谈论"配置"和" const"值。这是一个完全不同于一般情况的情况,我认为您可以安全地使用针对该目标的consts头文件。

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

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

答案 1 :(得分:0)

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

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