私はメモリマネージドコードが新ですが、私はかなりうまく考えています。Objective Cリリース、オートリリース、データタイプ
私のアプリケーションをXCodeのリークツールで撮ると、私は自分のカスタムオブジェクトをクリーンアップしなければならないことに気付きましたが、例えば動的に作成された配列は除かれていました。私が使用した配列を(保持する)プロパティとして解放します。
は、それから私は、独特の何かに気づいた:私はこのように初期化され、特定のアレイ上にリークなっていた。
NSMutableArray *removals = [NSMutableArray new];
ではなく、同様のもの今
NSMutableArray *removals = [NSMutableArray arrayWithCapacity:9];
を、1を設定した理由を「新しい」とは0〜99の項目を持つことができるということですが、私が知っているもう1つの項目は常に9になるはずです。両方の配列が後でユーザーのやりとりに基づいて同じメソッドに渡されるため、私がメソッドの終わりに解放しなかった場合、または私が行った場合は例外が発生しました!
私は
NSMutableArray *removals = [NSMutableArray arrayWithCapacity:99];
に最初の配列を変更し、私はリークを取得していないし、何かを解放する必要はありません。誰でも説明できますか?
**これらのメソッドのすべて**は、保持カウント1のオブジェクトを返します。違いは、あなたがオブジェクトを所有しているため、オブジェクトをリリースする必要があります。それを解放する必要はありません(しかし、現在のコールチェーンを過ぎていることを期待することはできません)。 – Chuck
厳密に言えば、その実装の詳細はありません。多くの場合、保持数の異なるものが返されます。たとえば、[= UIImage imageNamed:]は、キャッシュされたイメージを再利用できるため、非常に大きなlargeCountを持つものを返す可能性があります。 –
さて、はい、保持カウント自体は実装の詳細です。 Appleのドキュメントはそれほど多くのことを言います。上記のすべてのケースでは、現在のバージョンのOS Xでは、この実装の詳細の値は1です。 – Chuck