7

私は違いを知っていると思いますが、それを正しく説明する方法がわかりません。

Deallocは、その変数によって予約されているメモリを完全かつ即座に削除します。

releaseは、その変数のメモリの保持カウンタを-1だけデクリメントします。1の場合は0なので、その瞬間のdeallocと同じ効果があります。

そうですか?またはより良い簡単な説明がありますか?

4

2 に答える 2

13

その通りです。

ただしdealloc、保持カウントが何であるかがわからないため、オブジェクトを使用する場合は使用しません。あなたも気にしません。を呼び出して、もう必要ないと言うだけですrelease。そして、誰もしなくなると、オブジェクトは自分自身を呼び出しdeallocます。

于 2009-04-07T12:32:51.247 に答える
7

すべて正しいですが、あなたが見逃している 1 つの重要なポイントは、自分で dealloc を呼び出すべきではないということです。NSObject の dealloc メソッドに関する Apple のドキュメントからの情報を次に示します。

( http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/nsobject_Class/Reference/Reference.html#//apple_ref/occ/instm/NSObject/deallocから)

dealloc メッセージを直接送信することはありません。代わりに、リリース NSObject プロトコル メソッドを通じてオブジェクトの dealloc メソッドが間接的に呼び出されます (リリース メッセージの結果、受信者の保持カウントが 0 になる場合)。これらのメソッドの使用方法の詳細については、Cocoa のメモリ管理プログラミング ガイドを参照してください。

サブクラスは、独自のバージョンの dealloc を実装して、オブジェクトによって消費される追加のメモリを解放できるようにする必要があります。これには、データ用に動的に割り当てられたストレージや、割り当て解除されたオブジェクトが所有するオブジェクト インスタンス変数などがあります。クラス固有の割り当て解除を実行した後、サブクラス メソッドは、スーパーへのメッセージを通じて、スーパークラス バージョンの dealloc を組み込む必要があります。

于 2009-04-07T12:36:41.783 に答える