値 type を使用してより良いアプリを構築するのを見た後。彼らが作ったPhotoshopの例では、彼らは言った
その図の 2 つのインスタンスでコピーされるのは、人物のシャツを含むタイルだけです。したがって、古い状態と新しい状態という 2 つの別個のドキュメントがありますが、結果として消費しなければならなかった唯一の新しいデータは、この人のシャツに含まれるタイルです。
それで、メモリ内のこれら 2 つの配列がどのように見えるか疑問に思い始めました。そこで、ちょっとした実験をします。
struct Test {
var i: Int
var j: Int
}
var valueArray = [Test(i: 1, j: 9), Test(i: 2, j: 7)]
var valueArray2 = valueArray
valueArray と valueArray2 のアドレスを出力すると、それらは同じではありません。
「たぶん、配列にポインタを格納することでこれを実装していますか?」
しかし、 lldb を使用してメモリの内容を出力すると、実際には 4 Int (1,9,2,7) になります。
だから私は混乱しています、私はまだ配列を変更していません。そして、彼らは配列全体のコピーを作成しているようですか? では、どこを誤解したのでしょうか。
構造体のアドレスを出力するために使用した関数は、この質問で @nschum によって提供されたメソッドを使用することです。
func address(o: UnsafePointer<Void>) {
let addr = unsafeBitCast(o, Int.self)
print(NSString(format: "%p", addr))
}
これは、この質問の重複した質問ではありません。私は言語フェザーについて、もう 1 つはプログラミング スキルについて質問しています。