1. ホーム
  2. objective-c

[解決済み] retainCountはいつ使うのか?

2022-10-10 01:36:44

質問

どのような場面で -retainCount をどのような状況で使用したのか、そして最終的にそれを使用して起こる可能性のある問題を知りたいです。

ありがとうございます。

どのように解決するのですか?

あなたは決して -retainCount は決して使ってはいけません。なぜなら、有益なことは何も教えてくれないからです。 Foundation と AppKit/UIKit フレームワークの実装は不透明で、何が保持されているか、なぜ保持されているか、誰が保持しているか、いつ保持されたのか、などわかりません。

たとえば

  • と思うでしょう。 [NSNumber numberWithInt:1] を持つことになるでしょう。 retainCount が1になってしまいますが、そうではありません。 それは2です。
  • と思うだろうが @"Foo" を持つことになるでしょう。 retainCount は 1 になるはずですが、そうではありません。 1152921504606846975 です。
  • と思うだろうが [NSString stringWithString:@"Foo"] を持つことになるでしょう。 retainCount は 1 になりますが、そうではありません。 繰り返しになりますが、1152921504606846975です。

基本的に、どんなものでもオブジェクトを保持することができるので、(したがって、その retainCount を変更することができます。また、アプリケーションを実行するコードのほとんどはソースを持っていないため、オブジェクトの retainCount は意味を持ちません。

オブジェクトが割り当て解除されない原因を突き止めたい場合は、InstrumentsのLeaksツールを使ってください。 オブジェクトの割り当て解除が早すぎる原因を突き止めたい場合は、Instruments の Zombies ツールを使用します。

ただし -retainCount . 本当に価値のない方法です。

編集

皆さんは http://bugreport.apple.com にアクセスして、リクエストしてください。 -retainCount を非推奨とするよう要請してください。 それを求める人が多ければ多いほど良いのです。

編集その2

アップデートとして [NSNumber numberWithInt:1]retainCount が 9223372036854775807 になりました。 コードが 2 であることを期待していた場合、そのコードは今破損しています。