Swift 中静态变量的生命周期是多长?

Ala*_*ACK 0 ios swift

背景

我有以下两个课程ViewControllerAViewControllerB

class ViewControllerA: UIViewController
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

对于 的定义,ViewControllerB我们还有一个静态变量。

class ViewControllerB: UIViewController
{
    static var hasSeenTheLightOfDay: Bool = false
    ...
    func viewDidLoad()
    {
        ViewControllerB.hasSeenTheLightOfDay = true
    }
}
Run Code Online (Sandbox Code Playgroud)

现在假设我的 iOS 应用程序以以下方式运行:

User Taps App -> UINavigationController -> ViewControllerA -> ViewControllerB ->
                                                                               |
                                                                         User Goes Back
                                                                               |
                                           ViewControllerA <--------------------

Run Code Online (Sandbox Code Playgroud)

就问题而言,ViewControllerA不包含任何对 的引用ViewControllerB

问题

有人可以带我了解静态变量的整个生命周期吗hasSeenTheLightOfDay

  1. 它什么时候出现?

  2. 它什么时候消失?

  3. 它还能保值吗true?或者false?或者它会翻转吗?如果ViewControllerB从 连续多次膨胀/退出ViewControllerA

Rob*_*Rob 5

你问:

\n
\n
    \n
  1. 它什么时候出现?
  2. \n
\n
\n

当你第一次引用它时。

\n
\n
    \n
  1. 它什么时候消失?
  2. \n
\n
\n

它没有\xe2\x80\x99t。

\n
\n
    \n
  1. 它保留真实值吗?还是假的?或者它会翻转吗?如果 ViewControllerB 从 ViewControllerA 连续多次膨胀/退出。
  2. \n
\n
\n

它会保留您设置的值。它不会翻转。

\n
\n

Swift 编程语言:属性说:

\n
\n

存储的类型属性在首次访问时延迟初始化。它们\xe2\x80\x99保证只被初始化一次,即使被多个线程同时访问,并且它们\xe2\x80\x99不需要用修饰符标记lazy

\n
\n