2016-11-06 2 views
1

私はスウィフトのメモリ管理に関して少し混乱しています。誰かがいつ私は同じようなメモリアドレスに常にkid1来る説明することができますか?私がkid1 = kid2や新しいオブジェクトを初期化しても?スウィフトのメモリ管理

Sample Playground

答えて

3

あなたのコードは、kid1変数のメモリ位置を印刷し し、変数に新しい値を割り当てる場合には変更されません。

Kidが参照型(クラス)であるなら、あなたは変数の参照こと クラスインスタンスの一意の識別子を取得するために ObjectIdentifierを使用することができます。

var kid1 = Kid(name: "A") 
var kid2 = Kid(name: "B") 

print(ObjectIdentifier(kid1)) // ObjectIdentifier(0x0000000100b06220) 
print(ObjectIdentifier(kid2)) // ObjectIdentifier(0x0000000100b06250) 

kid1 = kid2 
print(ObjectIdentifier(kid1)) // ObjectIdentifier(0x0000000100b06250) 

オブジェクト識別子があることを起こりますアドレスは インスタンスですが、これは文書化されていない実装の詳細です。 あなたは本当のポインタ にオブジェクト参照を変換する必要がある場合は、あなたが行うことができます(How to cast self to UnsafeMutablePointer<Void> type in swiftを比較)

print(Unmanaged.passUnretained(kid1).toOpaque()) 
+1

偉大な答え - ありがとう – YogevSitton