Objective-C を使用する際に、変数を解放する適切なタイミングを理解するのに役立つ経験則はありますか?
4 に答える
ナルク!:)
New 、A lloc、Retain、またはCopyを含むメソッドを呼び出した場合は、またはを実行する必要があります。そうでなければ、あなたはそれに触れません。releaseautorelease
もちろん、ドキュメンテーションが明示的に述べていることは、この規則より優先されます。
もう 1 つは、C 関数を扱っている場合でも NARC ルールが適用されますが、Create ルールも取得されます。関数に「create」が含まれている場合、返されたデータを CFReleasing または解放する責任があります。
メモリ管理ルールを数回読むことを強くお勧めします。非常に短く、難しくありません。このドキュメントの内容を理解すれば、不思議に思う必要はありません。
基本的には所有権と考えてください。new、copyまたはを使用してオブジェクトを作成するかalloc、オブジェクトを保持すると、そのオブジェクトを所有します。所有者がいる限り、オブジェクトは消えません。オブジェクトを使い終わったら、あなたはreleaseそれを所有し、所有権を放棄します。オブジェクトに所有者がいなくなると、そのオブジェクトはなくなり、割り当てが解除される可能性があります。new所有していない、または所有していないオブジェクトはすべてalloc、現在の呼び出しチェーンを超えて存在することを保証できません (つまり、それを使用したり返したりすることは問題ありませんが、後で使用するために保存することはできません)。retaincopy
リソースの使用に関する経験則は、「取得は遅く、リリースは早め」です。これは、リソースをできるだけ遅く取得し、できるだけ早くリリースする必要があることを意味します。使用期間はできるだけ短くする必要があります。
Learn Objective-Cと呼ばれる Scott Stevenson による素晴らしいチュートリアルがあります。また、メモリ管理に関するセクションも含まれています。