2

最後の行が-1と出力される理由を誰かが説明できますか?これは、コピーがNSMutableStringで呼び出されたときに発生します。不変のコピーが返される必要があるため、strFourのreturnCountは1になると思います。

    NSMutableString *str =[NSMutableString stringWithString:@"hi"];
NSLog(@"new instantiated variable has a retain cout:");
NSLog(@"%d",[str retainCount]);  //1, str is a pointer, its value is a memory address

NSMutableString *strFour =[str copy]; //receiver str is mutable, copy returns an immutable 
NSLog(@"%d",[strFour retainCount]); ////strFour s retain count should be 1, but it had a retain count of -1

どうもありがとう。

4

1 に答える 1

3

オブジェクトの保持カウントを気にしないでください。そうすることは常に無意味です。保持数は、「内部」の最適化の影響を受ける可能性があります。これらの最適化は、コードがCocoa メモリ管理ガイドラインに従っているという事実に依存しています。これらのガイドラインに固執することだけを心配し、わざわざ保持カウントを直接見ないでください。

文字列「hi」がどこかにキャッシュされている可能性があり、コピーがキャッシュされた文字列を参照しているため、(-1) になる理由の 1 つです。保持カウントは実際には符号なし整数であることに注意してください。ドキュメント dor-retainCountは、決して解放されないオブジェクトの場合、保持カウントはUINT_MAX(符号付き 10 進数として出力されると「-1」として出力される) べきであると述べています。

于 2010-02-14T21:08:46.590 に答える