非アークで記述されたライブラリを使用しています(SMTPライブラリ-コンパイラフラグを使用して非アークを維持します)。現在、私のクラスの1つがこのライブラリのデリゲートとして登録されており、ライブラリは保持カウント1のオブジェクトを渡しています。pre-arc私はそのようなオブジェクトを解放する必要がありましたが、今アークでは何をすべきかわかりませんか?
1 に答える
クラスがそれ自体を解放する場合、オブジェクトの前にすべてのクラスのすべてのインスタンス変数を解放する必要があることに注意してください。ARC以前のルールは、
new、alloc、または copy を使用してオブジェクトを作成すると、オブジェクトの保持カウントは 1 になります。オブジェクトの使用が終了したら、解放または自動解放メッセージをオブジェクトに送信する必要があります。そうすれば、耐用年数が終わったときにクリーンアップされます。
他のメカニズムを介してオブジェクトを取得した場合は、保持カウントが 1 であり、既に自動解放されていると想定してください。確実にクリーンアップするために、それ以上の作業を行う必要はありません。オブジェクトに長時間しがみつく場合は、それを保持し、終了したら必ず解放してください。
オブジェクトを保持する場合は、(最終的に) オブジェクトを解放または自動解放する必要があります。これらの保持と解放のバランスを取ります。
したがって、オブジェクトを一時的に (単一の関数のスコープ内のように) 使用する場合は何もしませんが、長期間使用する場合はそれを保持し (保持カウントを 2 に増やします)、完了したら解放することができます。最初の保持カウントは 1 です。図書館の仕事になります。