2つの質問があります:
オブジェクトがあり、それをXと呼びます。オブジェクトX(
[x retain]
)に保持を割り当ててから、オブジェクトXのデータを変更すると、Xの保持カウントはいくつになりますか?AとBの2つのオブジェクトがあります。最初に、次のようなコピーを作成します。
B = [A copy];
オブジェクトAのデータを変更します。Bデータも変更されますか。また、データ変更前後のAとBの両方の参照カウントはどうなりますか。
2つの質問があります:
オブジェクトがあり、それをXと呼びます。オブジェクトX([x retain]
)に保持を割り当ててから、オブジェクトXのデータを変更すると、Xの保持カウントはいくつになりますか?
AとBの2つのオブジェクトがあります。最初に、次のようなコピーを作成します。
B = [A copy];
オブジェクトAのデータを変更します。Bデータも変更されますか。また、データ変更前後のAとBの両方の参照カウントはどうなりますか。
データを変更する前と同じです。
私。いいえ、コピーした後、2つの独立したオブジェクトがあります。一方を変更しても、もう一方には影響しなくなりました。
ii。データを変更する前と同じです。
Appleのメモリ管理エッセイをご覧ください。
1の場合、のようにデータを変更する場合x.foo = y
、保持カウントは変更されません。を意味する場合、xはx = y
yであるため、xの保持カウントはyの保持カウントに変更されます。
2の場合
Bのデータは変更されていません。Bの保持数は1です。Aの保持数はコピー前と同じです。
これは通常のケースですが、オブジェクトはコピーから新しいものではないオブジェクトを返すことを選択できると思います。不変のNSStringはコピーとして返されると思うので、Bの保持カウントは1ではなく、Aの保持カウントは1増加します。基本的に、これに依存することはできません。