Objective Cでカスタムクラスを作成すると、いつメソッドが呼び出されますか?dealloc
私は何とか私のクラスで実装する必要がありますか?Objective Cでdeallocメソッドを呼び出すのは誰ですか?
答えて
deallocメッセージを直接送信することはありません。その代わりに、オブジェクトのdeallocメソッドはリリースNSObjectプロトコルメソッドを介して間接的に呼び出されます(リリースメッセージによって受信者の保持カウントが0になる場合)。これらのメソッドの使用の詳細については、「メモリ管理プログラミングガイド」を参照してください。
サブクラスは、オブジェクトによって消費される追加メモリの解放を可能にするために、deallocatedオブジェクトによって所有されているデータまたはオブジェクトインスタンス変数のための動的に割り当てられたストレージなど、
重要:アプリケーションが終了すると、プロセスのメモリはdealloc メッセージで送信されないことに注意してください。終了時に自動的にクリアされます。 オペレーティングシステムがすべてのメモリを呼び出すよりもリソースをクリーンアップできるようにするのがより効率的です。 管理方法。このおよびその他の理由により、あなたはmemory managementの結果として呼び出され のdealloc
- (void)release
{
_retainCount--;
if (_retainCount == 0) {
[self dealloc];
}
}
オブジェクトが不要になったとき(実行時も同様)、ランタイムはこれを行います。あなたが正しく保持され、リリースされていることを確認してください。他のオブジェクトでdeallocを呼び出さないでください。
dealloc
で希少な資源を管理するべきではありません。オブジェクト "retainCount"が0に達すると、自動的にそのオブジェクトにデオロッコメッセージが送信されます。
オーバーライドされたdeallocの末尾にある[super dealloc];
への呼び出しでない限り、オブジェクトに対してdeallocを呼び出さないでください。
-(void)dealloc
{
[ivar release]; //Release any retained variables before super dealloc
[super dealloc]; //Only place in your code you should ever call dealloc
}
そして-[NSObject dealloc] discussion
に応じてあなたは直接のdeallocメッセージを送信することはありません。その代わりに、オブジェクトの deallocメソッドがリリースNSObject プロトコルメソッド(リリースメッセージの結果、受信者の 保持カウントが0になる場合)によって間接的に呼び出されます。これらの方法の詳細については、 のMemory Management Programming Guideを参照してください。
-release
は、次のようにNSObjectの中に実装されていることを想像:私はそれはそれよりもう少し複雑だと確信していますが、あなたの質問への答えは、オブジェクト自体は-dealloc
ときに呼び出すということです
- (void)release
{
_retainCount--;
if (_retainCount == 0) {
[self dealloc]
}
}
その保持カウントはゼロに低下する。ただし、カスタムクラスはNSObjectからこの動作を継承します。あなたが書くコードで-deallocを自分で呼び出す必要はありません。オブジェクトが適切に解放されると、常に自動的に発生します。
- 1. Objective Cのinitメソッドとdeallocメソッドでアクセサメソッドを呼び出すのは安全ですか?
- 2. Objective-Cの動的メソッド呼び出し
- 3. objective-cクラス変数:deallocはいつ呼び出されますか?
- 4. Objective-Cは、別のUIViewControllerからメソッドを呼び出します。
- 5. objective-c:セレクタまたは純粋な呼び出しでまだクラス内を呼び出すメソッドですか?
- 6. Objective-C - このメソッドを呼び出すには?
- 7. Objective-CからPythonを呼び出す
- 8. UIWebView内のテキストをクリックしてObjective-Cメソッドを呼び出す
- 9. アプリケーション終了時に-deallocメソッドが呼び出されますか?
- 10. RAD XE2 DataSnap - Objective-C for iOSのメソッドを呼び出す
- 11. Objective Cではメソッドを呼び出すクラスと、呼び出さないメソッドのみを呼び出す方法を教えてください。
- 12. dealloc呼び出しでの混乱
- 13. 私のクラスでpaintComponent()メソッドを呼び出すのは誰ですか?
- 14. 親クラスメソッドからの子クラスの呼び出しメソッド(Objective-c 2.0)
- 15. Objective-Cで別のクラスファイルを参照するメソッドを呼び出す
- 16. クラスCでメソッドを呼び出す#
- 17. Objective-C - 呼び出し可能なメソッドにNSStringをパーズする
- 18. Objective-Cメソッドを呼び出す不正なアクセス
- 19. スーパーオブジェクトからのObjective-C呼び出しメソッド。
- 20. Objective-Cは、Objective-Cを呼び出すUIWebViewのjavascriptを呼び出します。スレッドの問題
- 21. ウィンドウを呼び出す別の方法は? Objective-Cで
- 22. メソッドC#で別のメソッドを呼び出す方法は?
- 23. Objective Cサブクラスの初期化メソッドがスーパークラスのinitializeメソッドを呼び出す方法
- 24. 例Objective-CプロジェクトObjective-C++コードを呼び出す
- 25. C++ - クラステンプレートからメソッドを呼び出す
- 26. C++からWebメソッドを呼び出す
- 27. C#はWebメソッドを呼び出す
- 28. 舞台裏でVisualStateManager.GoToStateを呼び出すのは誰ですか?
- 29. Objective CでcURLを呼び出す方法は?
- 30. 誰が私のjavascriptメソッドを呼び出していますか?
私はこのメソッド本体が 'retain'ではなく 'release'の下にあることを望みます。 – Saran
@ saran、あなたは絶対に正しいです。私の愚かな間違い。それをキャッチするためにありがとう。 – Caleb
本当に素敵なanswer.i上記の答えを与えるが、あなたの答えは実用的な方法で最高だと思う.. – PJR