すべての配列を再帰的に空にするわけではありません。削除すると、参照カウントが減少します。配列の参照カウントが 0 の場合、すべてのオブジェクトが削除されます。彼らは自分たちで後片付けをします。
iow,sasquatch
のサブ配列は変更されませんが、例外が 1 つありますsasquatch
。そのサブ配列への最後の参照が保持されている場合です。その場合、要素 (サスカッチのサブ配列) は割り当て解除されます。
ARC で [sasquatch removeAllObjects] を呼び出すと、これにより、サスカッチ配列内のすべての配列が nil になりますか?
まあ、それrelease
は各要素に送信して、count
(など)を変更するだけです。要素NSArrays
を保持できません-- 禁止されています。nil
したがって、配列の を作成するcopy
と、サブ配列への参照が追加され、コピーによっても参照が保持されるようになるため、サブ配列の有効期間が延長されます。
そのため、サスカッチ配列の配列内のオブジェクトもすべて削除され、割り当てが解除されますか?
sasquatch が最後の参照を保持していた場合、その時点でサブ配列の割り当てが解除されます。参照は自動解放プールにも存在する可能性があるため、最も単純なケースであっても、破棄の順序が明示的に定義されていないことに注意してください。
別の見方をすると、すべての要素sasquatch
とそのサブ配列は (再帰的に) 最後の参照が失われると破棄されます。すべての要素が最後に保持された参照である場合のみです。
removeAllElements
つまり、どちらの場合も、クリーンアップのために呼び出す必要はありません。