2

オブジェクトを作成してその保持カウントを確認すると、期待どおりに1が得られます。オブジェクトを解放して、保持カウントを再度確認すると、まだ1です。オブジェクトの割り当てを解除して、保持カウントを0にする必要がありますか?

NSMutableString *str=[[NSMutableString alloc] initWithString:@"hello"];
NSLog(@"reference count is %i",[str retainCount]);
[str release];
NSLog(@"reference count is %i",[str retainCount]);

最初に設定した場合、保持カウントに0表示されます。何故ですか?strnil

4

2 に答える 2

2

に依存しないでくださいretainCount。そして、これについては気にしないでください。内部で多くのことが起こる可能性があります。所有しているものをすべてリリースしたことを確認するだけで済みます。メモリがリークしていないことを確認しようとしている場合は、NSLogのretainCountではなくInstrumentを使用してください。

于 2011-03-05T16:21:21.237 に答える
2

使用retainCountしないでください。ほとんどの場合、期待どおりに機能しません。

2つ目NSLogは、割り当て解除されたメモリにオブジェクトとしてアクセスすることです。この特定のケースでは、割り当て解除されたメモリには、retainCountメソッドが呼び出されたときにプログラムがクラッシュしないように解放されたばかりのNSStringからの古いデータがまだ十分に含まれています。これを一緒に実行するNSZombieEnabledと、割り当て解除されたインスタンスにメッセージを送信することに関するエラーメッセージが表示されます。

nilに対して呼び出されたときに0を返す理由は、整数を返すメソッドは、nilオブジェクトに対して呼び出されたときに常に0を返すためです。

于 2011-03-05T16:32:09.257 に答える