ios - Swift 中静态变量的生命周期是多久?
问题描述
背景
我有以下两个类ViewControllerA
和ViewControllerB
.
class ViewControllerA: UIViewController
{
...
}
对于定义ViewControllerB
我们也有一个静态变量。
class ViewControllerB: UIViewController
{
static var hasSeenTheLightOfDay: Bool = false
...
func viewDidLoad()
{
ViewControllerB.hasSeenTheLightOfDay = true
}
}
现在假设我的 iOS 应用程序以下列方式运行:
User Taps App -> UINavigationController -> ViewControllerA -> ViewControllerB ->
|
User Goes Back
|
ViewControllerA <--------------------
就问题而言,ViewControllerA
不包含对 的任何引用ViewControllerB
。
问题
有人可以引导我完成静态变量的整个生命周期hasSeenTheLightOfDay
吗?
它什么时候出现?
它什么时候不存在了?
它是否保留了价值
true
?还是false
?还是它会翻转?如果ViewControllerB
从 连续多次膨胀/退出ViewControllerA
。
解决方案
您询问:
- 它什么时候出现?
当你第一次引用它时。
- 它什么时候不存在了?
它没有。
- 它是否保留值 true?还是假的?还是它会翻转?如果 ViewControllerB 从 ViewControllerA 连续多次膨胀/退出。
它保留您设置的值。它不会触发。
存储的类型属性在第一次访问时被延迟初始化。它们保证只被初始化一次,即使被多个线程同时访问,它们也不需要用
lazy
修饰符标记。
推荐阅读
- c - C header declaration for generics (macro)
- c++ - C++ WINAPI 如何只运行一次鼠标事件?
- c++ - C++ 指针和 &Pointer 的区别
- java - 带括号的右移运算符
- javascript - AppleScript:使用 .click() 触发输入文件实际上并不附加文件
- javascript - React:使用 Generator 制作具有正向和反向方向的循环组件
- javascript - 通过单击外部关闭 html5 对话框
- rust - 为什么将所有权转移到一个函数并没有赋予我对该变量的变异权?
- bigcartel - 如何证明左边的文本块并将其浮动在大卡特尔页面的中心?
- pdfkit - PDFKit iOS 15 打印 pdf 页面不正确