2016-12-02 4 views
2

私はC#でおよそusing(){}を発見 - > Uses of "using" in C#C#のusing(){...}は、Cocoaのautoreleasepool {...}と同じ目的を果たしますか?

を私はココアでARCを使用し、C#がGCを使用しているためautorelease{}using(){}と同じではないことを知っています。 - > Is it necessary to use autoreleasepool in a Swift program?

実際に同じ目的を果たしている場合、両方を使用している誰かから確認したいだけです。

編集:これらのアイデアを橋渡しするサードパーティのC#コンパイラが見つかりました。

RemObjects C#では、(__autoreleasepool)構文を使用して自動解放プールの手動宣言もサポートしています。

http://www.elementscompiler.com/elements/hydrogene/cocoa.aspx

C#でusing(){...}はココアでautoreleasepool{...}と同じ目的を果たしていますか?

+0

リンク先:RemObjects C#は、(__autoreleasepool)構文を使用して自動解放プールの手動宣言をサポートしています。 – CodingYoshi

答えて

3

いいえ、それらは異なっています。

C#のusingステートメントは、リソースの取得と廃棄に関するものです。これは通常、ファイルなどの外部リソースであり、取得によってファイルが開かれ、処分によってファイルが閉じられます。

Objective-Cの自動解放プールは、メモリオブジェクトの有効期間を制御することについてです。プールに置かれたオブジェクトは、プールが排水されたときに解放されます。これは、イベントループの各反復の最後にデフォルトのプールに対して解放されます。

+0

したがって、autoreleasepoolは、オブジェクトがスコープ外に出てしまう副作用としてリソースを解放することもできます。 C#のusing()の特定の使い方は、リソースの廃棄(接続の終了など)ですが、GCがオブジェクトのメモリを再利用できることを知らせるという副作用がありますか? – masters3d

+1

C# 'using'はGCに直接関連付けられていません。リソースの取得*はオブジェクトの作成を伴うかもしれませんが、必要はありません。リソース廃棄は 'Dispose()'を呼び出し、オブジェクトはもはや必要ではなく、オブジェクト*は引き続き使用されるかもしれないとGCに通知しません。 'Disposable'を実装するオブジェクトは、自身の' Dispose() 'をfinalizerの一部として呼び出す必要はありません。典型的な「使用する」の使用は、資源オブジェクトの割当ておよび割振りを伴い得るが、それは使用パターンであり、要件ではない。 – CRD

関連する問題