了解可视化swift初始化器

时间:2016-08-21 04:36:51

标签: ios swift initialization

我无法在Swift中可视化初始化程序的工作。对于官方文档中的这个例子。

struct Fahrenheit{
   var temp : Double
   init(){
      temp = 32.0
  }
}
var f = Fahrenheit()
print(" \(f.temp)")
//Prints 32.0

这是我迄今所理解的,请在我错的时候纠正我:

  1. struct是一种值类型。
  2. variable temp是一个存储属性,它将值存储在定义结构的内存空间内(在内存中)。
  3. 当我们创建一个变量' f'是结构的实例(对象)副本华氏是在具有相同属性的另一个内存空间中创建的。
  4. 我无法理解的是什么是

    init(){
              temp = 32.0
          }
    
    1. 做实例f。
    2. 我们什么时候使用初始化器。 (主要目的:使用一个例子)。
    3. 还有函数,闭包和初始值设定项之间的区别,它们如何存储在内存中?

1 个答案:

答案 0 :(得分:3)

深入理解对象的创建过程(作为类的实例或结构的实例)是非常重要的。基于在类或结构中定义的模板,在"空间"中创建对象。我喜欢将其命名为"对象空间"。因此,对象是"对象空间"中的struct Fahrenheit的实例。你可以尝试将它(可视化)看作一个气球。变量f是对该对象的引用,它被用作访问此气球(对象,实例)的工具。 我建议你看一下Apple的文档:

https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html

在这里你可以看到:

Suggestion, how to visualize it...

并且 - 在我看来,这是一个如何可视化对象和对象引用的好方法。

因此,当系统执行:var f = Fahrenheit()时,首先 - 它在Object空间中生成一个气球,它调用初始值(隐式或显式)来设置初始值,而不是它产生一个引用(f) - 指向刚出生的物体。

所以:

init(){
      temp = 32.0
  }

不会对-f产生影响,它会在对象(气球)内部产生效果,并且f用于访问气球。 (如果没有引用,ARC将终止该对象)