私はARCについて読みましたが、すべてのコンパイラでサポートされているわけではありません。だから私は、すべてのシナリオでメモリを管理するのと同じ方法ではないと思います。コンパイラによって異なります。Delphi ARCコンパイラのメモリ管理
私はこれを見つけましたが、「古典的な」デルファイとARCデルファイの間のメモリ管理の違いを理解するのは難しいです。私はそれがFree
を自動的に呼び出すことを理解したので、コードの違いは何ですか?
可能であれば、コードを入力してください。
私はARCについて読みましたが、すべてのコンパイラでサポートされているわけではありません。だから私は、すべてのシナリオでメモリを管理するのと同じ方法ではないと思います。コンパイラによって異なります。Delphi ARCコンパイラのメモリ管理
私はこれを見つけましたが、「古典的な」デルファイとARCデルファイの間のメモリ管理の違いを理解するのは難しいです。私はそれがFree
を自動的に呼び出すことを理解したので、コードの違いは何ですか?
可能であれば、コードを入力してください。
まず第一に、私はあなたがまだの場合は、ドキュメントを見てお勧め:
Automatic Reference Counting in Delphi Mobile Compilers。
ここでは、このトピックに関する完全な説明を見つけることができます。 Delphiで
自動リファレンスカウント
メモリ管理は常にあなたはARC対応のコンパイラを使用している場合は、物事が変更しようとしているので、同じではありません。
ARCは、短くするために、必要のないオブジェクトを心配することなく、オブジェクトの存続時間を管理する方法です。
これは通常、私はtry-finally
ブロック内のコードを配置する必要がありここでは、オブジェクト(非 ARC)
var
a: TMyNiceClass;
begin
a := TMyNiceClass.Create;
try
a.somethingToDo();
finally
a.Free;
end;
end;
を使用する方法ですので、私はときに私私の物体が離れて行くことを確信していますもはやそれを必要としません(私はメモリリークを避ける)。代わりに下ARC:
var
a: TMyNiceClass;
begin
a := TMyNiceClass.Create;
a.somethingToDo();
end;
あなたがFree
に必要はありませんし、どちらも、それは「自動」であるため、try-finally
を使用していないので、上記のコードは、ARCの下で、正常に動作します。また、デストラクタは、の最後に到達すると呼び出されます。ステートメントですが、終了前にオブジェクトの使用を停止したい場合はa := nil
を使用できます。
注
伝統的なスタイルでFree
を呼び出すデストラクタを呼び出す(オブジェクトへの参照がゼロでない限り)、ARCスタイルでFree
オブジェクト=ゼロへの参照を割り当てます。
よかった。しかし、メモリリークはヒープ上のものですか?フリーアンドンドはどうですか? –
多くのオブジェクトを呼び出しても解放されないと、メモリリークが発生します。 FreeAndNilはオブジェクトを解放し、その参照をnilに設定します。 –
無料で無料で自由にできるものは何ですか? –
デルファイコンパイラで実装されているように、ARCが混乱する可能性があります。 不要な互換性ブレーカーです。
書籍を正しく作成するには、Delphi Memory Management For Classic And ARC Compilersが必要な場合があります。カバーの4から
エキス:
Delphiは、独自のメモリ管理 ロジックとさまざまな種類の、ならびにクラスの異なるメモリ 管理システムを提供するコンパイラの二組を提供します。
- 現在、WindowsおよびOSXプラットフォームでサポートされているクラシックのDelphiコンパイラ - 手動メモリ管理を使用して、特定のタイプの のARCを提供します。
- モバイルAndroidおよびiOSプラットフォームでサポートされている次世代のARC Delphiコンパイラ、およびLinux - フルARC - 自動参照の使用 メモリ管理システムをカウントしています。
それぞれのメモリ管理システムは、良い面と悪い面を持っています。それぞれはいくつかの問題に対して のソリューションを提供していますが、他のすべての問題を引き起こします。 それぞれにはわずかに異なるコーディングパターンと練習が必要です。長所と短所を理解し、どのようにメモリ管理システムが動作するのかを理解してください。 バグのない、保守可能なコードです。
あなたの個人的な意見とコピー/貼り付けをありがとう –
それを理解するために本が必要な場合、上記の質問をしてもARCが混乱するという事実です。コピー&ペーストはそのように識別され、全体のポイントの非常に良い合計です。 –
無料を使用する必要があるかどうかを知りたいですか? –
また、私はそれを使用することができないと私は何もないトリックする必要がありますが... try-finallyブロックが消えてしまうのは正しいですか? –
なぜこれにdownvote? –