Swift:全局结构中静态字段的生命周期

时间:2016-07-23 18:04:25

标签: ios swift struct static global-variables

我有两个View Controller在一个全局结构中访问常量,在一个单独的文件中定义。结构如下:

struct Constants {
    struct FAQ {
        struct General {
            static let QUESTIONS: [String] = [
                //Some String questions here
            ]
            static let ANSWERS: [String] = [
                //Answers here
            ]
        }
        struct Specific {
            static let QUESTIONS: [String] = [
                //Questions
            ]
        }
    }

    struct Tips {
        struct General {
            static let QUESTIONS: [String] = [
                //Questions
            ]
            static let ANSWERS: [String] = [
                //Answers
            ]
        }
    }
}

现在,从一个VC,控制我的应用程序的常见问题解答,我访问Constants.FAQ及其中的所有数据。 从处理提示的另一个VC,我访问Constants.Tips。

现在,我的问题。一旦FAQ视图控制器被操作系统从内存中删除后,FAQ结构的生命周期是多少?它是否会留在应用程序的生命周期中?

举一个用例,举个例子: 常见问题VC已创建并开始执行。常见问题VC访问Constants.FAQ.General.QUESTIONS并进行处理。现在,FAQ VC停止执行并从内存中删除。 一段时间后,创建FAQ Tips并开始执行。它访问Constants.Tips.General.QUESTIONS并进行处理。 现在,在这个时候,Constants.FAQ.General.QUESTIONS字符串数组仍然在内存中?或者它的生命周期仅限于它在FAQ VC中的访问权限。

另一个问题,我在谈论它:使用这种结构的好习惯吗?

感谢。

2 个答案:

答案 0 :(得分:1)

此结构以及所有子结构和静态方法将在应用启动时定义,并且只要应用程序正在运行就会存在。

要回答你的第二个问题,通常不认为这是一种良好做法。全局数据通常容易出错,不易变化,难以测试。在您的情况下,数据是静态的,这避免了全局共享数据的一些问题。

通常,数据保存在单独的数据文件中,并在运行时加载。通过设置属性或通过方法调用将数据传递给每个视图控制器是有利的。

考虑将json或plist加载到数组或字典中,然后将数据解析为此结构的实例。

答案 1 :(得分:0)

这取决于如何创建Constants()。如果它是在定义它的同一模块中的文件范围内完成的,那么它将永远不会消失,因为'let constants = Constants()`保留了一个引用。