3

現在、InstrumentでARCを使用するアプリケーションをデバッグしています。Object Asを含む配列が含まれている場合は、インスタンス変数でメソッドObject Bを明示的に呼び出す必要があるようです。これはです。removeAllObjectscontentsNSArray

- (void)dealloc {
    NSLog(@"%@ deallocing", self);
   [_contents removeAllObjects];
}

行をコメントアウトすると[_contents removeAllObjects]、Instrumentsは、親オブジェクトの割り当てが解除された後も、配列に含まれているオブジェクトがまだ生きていることを示します。NSArray割り当てを解除すると、それに含まれる要素の保持数が自動的に減ると思いました。では、なぜ明示的な削除が必要なのですか?この動作は、デバッグ自体の副作用ですか?

4

1 に答える 1

3

通常は:

  • オブジェクトの割り当てが解除されると、そのすべての ivar の割り当てが解除されます。
  • 配列の割り当てが解除されると、配列内のすべてのオブジェクトの保持カウントが減少します。

推測する必要がある場合は、配列内のオブジェクトをブロックのどこかで使用しています。ARC では、ブロックがメモリ リークの主な原因です。

配列と配列内のオブジェクトをどこで、またはどのように使用していますか?

于 2012-10-19T13:42:22.577 に答える