我有两个视图控制器在单个全局结构中访问常量,这些常量在单独的文件中定义。结构如下:
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中,控制我的应用程序的FAQ,我可以访问Constants.FAQ和其中的所有数据。
从另一个处理提示的VC中,我访问Constants.Tips。
现在,我的问题。操作系统将FAQ View Controller从内存中删除后,FAQ结构的寿命是多长?它会在应用程序的生命周期内保留在内存中吗?
给出一个用例,例如:
FAQ VC已创建并开始执行。 FAQ VC访问Constants.FAQ.General.QUESTIONS并进行处理。现在,FAQ VC停止执行并从内存中删除。
一段时间后,将创建FAQ技巧并开始执行。它访问Constants.Tips.General.QUESTIONS并进行处理。
现在,此时,Constants.FAQ.General.QUESTIONS字符串数组是否仍在内存中?还是它的生命周期仅限于FAQ VC中的访问。
在我发言时,另一个问题是:使用这种结构是好的做法吗?
谢谢。
最佳答案
此结构以及所有子结构和静态方法将在应用程序启动时定义,并且只要应用程序正在运行就将存在。
要回答您的第二个问题,不,这不是公认的好习惯。全局数据通常容易出错,难以更改且难以测试。您的数据是静态的,这避免了全局共享数据的某些问题。
通常,数据保存在单独的数据文件中,并在运行时加载。通过设置属性或通过方法调用将数据传递给每个视图控制器是有利的。
考虑将json或plist加载到数组或字典中,然后将数据解析为该结构的实例。
关于ios - Swift:全局结构内的静态字段的生存期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38544954/