2016-06-21 5 views
0

私のアプリでは、呼び出される前にプロパティがメモリに読み込まれているようです。私の理解に間違ったことがあるか、または私が見落としたことがあります。初期化の前にメモリにロードされたSwiftプロパティ

enter image description here

私はライン230だから私は上のプロパティlet user = User()を初期化するために期待している:私はあなたがイメージ(ライン226)上で見ることができるようにサインインがタップされた直後にブレークポイントを置いてきたことを説明するために、添付画像の左下に表示されているように、ユーザーが既にどのようにメモリに読み込まれているのか分かりません。

どうしてですか?
これは、フードの下で発生するコード最適化のようなものですか?

userがそれ以前にロード/初期化されていないことを確認できます(クラスプロパティではありません)。さらに、230行目以降をコメントアウトするとユーザーが読み込まれないことがわかります。そのため、230行目はユーザーが読み込まれる原因です。しかし、奇妙なことは、ブレークポイントで226行目の実行を一時停止したので、これが呼び出される前に起こるということです。

答えて

3

変数リストを読むことができることが重要です。 のストレージは既に初期化されていなくても、すべてのローカル変数は常にと表示されます。したがって、初期化の前に変数が表示されますが、は偽である可能性があります。私の推測では、値偽です。それはと言います。それはそのタイプなのでユーザですが、あなたが探しているときにはガベージを指しているので無視してください。実行パスが初期化を通過すると、値が変更され、実際の値になります。これはリリースビルドであれば、これはその値、それはいつでも割り当てることができるので、コードの前に依存しない定数あるので

(ただし、その後、確かに、ある種の最適化があるかもしれません。しかし、リリースビルドをデバッグするべきではありません。)

2

メモリにロードされていません。デバッガはスコープ内の変数を表示して表示しますが、表示される数値はメモリ内に存在するものです。 let user...ステートメントを踏むと、変数の値が、写真の他のオブジェクトアドレスのように変わることがわかります。

関連する問題