1.割り当て
NSArray* a = xxxxxx;
NSArray* b;
b = a;
2.コピー
NSArray* a = xxxxxx;
NSArray* b;
b = [a copy];
コピーは「ライトコピー」、可変コピーは「ディープコピー」です。
copyはコピーメモリアドレスであり、可変コピーはコピーメモリオブジェクトです。
しかし、私は割り当てとコピーの違いを知りません。
それは同じだ?
1.割り当て
NSArray* a = xxxxxx;
NSArray* b;
b = a;
2.コピー
NSArray* a = xxxxxx;
NSArray* b;
b = [a copy];
コピーは「ライトコピー」、可変コピーは「ディープコピー」です。
copyはコピーメモリアドレスであり、可変コピーはコピーメモリオブジェクトです。
しかし、私は割り当てとコピーの違いを知りません。
それは同じだ?
このAppleのドキュメントは役に立ちます:
通常のコピーは、オブジェクトの所有権を元のコレクションと共有する新しいコレクションを生成する浅いコピーです。ディープコピーは、オリジナルから新しいオブジェクトを作成し、それらを新しいコレクションに追加します。
したがって、最初の例ではb
、と同じNSArrayインスタンスを指しますa
。2番目の例では、がb
指す配列に含まれる同じオブジェクトへの参照を含むNSArrayの新しいインスタンスを指しa
ます。
b = a;
b
が指しているのと同じアドレスを指しているa
。したがって、どちらを変更しても同じになります。これはのように呼ばれcall by reference
ます。
b = [a copy];
の別のオブジェクトを作成a
していて、それがで示されていb
ます。ここでは、2つの異なるオブジェクトのセットが形成されるため、どちらかを変更すると、互いに独立します。これはのようなものcall by value
です。そして、ここでは、たとえ可変であったとしてもb
、の不変のコピーを保持します。a
a