2016-08-21 6 views
3

スウィフトのイニシャライザの動作を視覚化できません。この例は、公式のドキュメントです。スウィフトイニシャライザの視覚化の理解

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

は、ここで私は今まで理解何が私が間違っていたときに、私を修正してください:

  1. 構造体は値型です。
  2. 可変tempは、構造体が(メモリ内で)定義されているメモリ空間内に値を格納するストアドプロパティです。
  3. 変数 'f'を作成すると、構造華氏のインスタンス(オブジェクト)コピーが同じプロパティを持つ別のメモリ空間に作成されます。私が理解することができませんどのよう

init(){ 
      temp = 32.0 
     } 
  1. 何であるか、インスタンスfにやっていることです。
  2. 一般的には、インネシアターを使用するのはいつですか。 (主な目的:例を用いて)。
  3. また、関数、クロージャ、イニシャライザの違い、それらのメモリへの格納方法は?

答えて

3

オブジェクトの作成プロセス(クラスまたはインスタンスのインスタンスとして)を深く理解することは間違いなく重要です。オブジェクトは、クラスまたは構造体で定義されたテンプレートに基づいて作成されます。このオブジェクトは、「オブジェクト空間」という名前の「空間」内にあります。したがって、オブジェクトは、 "オブジェクト空間"内の華氏構造体のインスタンスであり、バルーンとして表示(視覚化)しようとする可能性があります。変数fはこのオブジェクトへの参照であり、このバルーン(オブジェクト、インスタンス)にアクセスするためのツールとして使用されています。 私はあなたがAppleのドキュメントを見てみることをお勧め:

ここ

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

あなたがこの見ることができます:

Suggestion, how to visualize it...

そして - 私の意見では、それは視覚化するどのように良い方法ですがオブジェクトとオブジェクトへの参照。

したがって、システムが実行すると、まず、オブジェクト空間でバルーンを作り、初期値を設定するためにinitialiser(暗黙的または明示的)を呼び出します。正当な目的のオブジェクトを指しています。だから、

init(){ 
     temp = 32.0 
    } 

がに効果がありません - fが、それはオブジェクト(バルーン)の内部で効果を行い、fはバルーンにアクセスするために使用されてています。 (参照がない場合、ARCはオブジェクトをkillします)

+0

fオブジェクトが作成されると、このオブジェクトは[9000]などのメモリアドレスを使用します。また、 'f'はメモリアドレス[9000]を参照するために使用されます。しかし、私は "それはオブジェクト(風船)の内部に効果をもたらす"と理解していませんでした。ありがとう! –

+0

tempの値はオブジェクト内にあります。したがって、イニシャライザはオブジェクト内で変更を行います。それはfの中で変化を起こさず、オブジェクト内で変化を起こします。 – tosha

+0

したがって、オブジェクトの一時的な値は基本的に更新されますか? –