以下の行のコードを説明してください。私は混乱しています..、
Nsstring *a;
Nsstring *b;
a = [b retain];
a & b の保持カウントは何ですか。
a = [b copy];
a & b の保持カウントは何ですか。
前もって感謝します。
以下の行のコードを説明してください。私は混乱しています..、
Nsstring *a;
Nsstring *b;
a = [b retain];
a & b の保持カウントは何ですか。
a = [b copy];
a & b の保持カウントは何ですか。
前もって感謝します。
技術的には、変数を初期化しないため、投稿した状況での保持カウントは不確定です。retain
初期化されていないポインターを呼び出すと、おそらくクラッシュします。
次に、状況での保持カウントは、変数をどのように初期化するかによって異なります。
NSString *a;
NSString *b = @"test";
a = [b retain];
/* Both variables reference the same object which has been retained.
Retain count +1
*/
NSString *a;
NSString *b = @"test 2";
a = [b copy];
/* `a` has a retain count +1 (a variable returned from a `copy`
method has a retain count +1). `b` retain count does not change
(you haven't called `retain` on `b`, so it's count remains the
same.
*/
まだお読みでない場合は、Apple のメモリ管理ガイドラインをお読みください。また、非常に正当な理由がない限り、ARCを使用する必要があります。これにより、メモリを手動で管理することによる頭痛のほとんどから解放されます。
他の回答のコメントで、オブジェクトの保持カウントを決定する方法を尋ねます。あなたは常にそれを自分で追跡します。他のオブジェクトが文字列を保持および解放する場合がありますが、気にする必要はありません。を使用してオブジェクトを作成し、オブジェクトまたはオブジェクトをalloc
呼び出す場合、そのオブジェクトを使い終わったときにそのオブジェクトを解放または自動解放する責任があります。そうでなければ、それはあなたの責任ではありません。オブジェクトの絶対保持カウントは重要ではありません。retain
copy
NSString
意味のある保持カウントがありません。ただし、一般的な例として使用している場合、通常の保持カウントを持つオブジェクトの保持カウントを見つける方法は次のとおりです。
[a retainCount]