2016-12-02 1 views
2

fand ich über using(){} in C# out -> Uses of "using" in C#Funktioniert Verwendung von() {...} in C# den gleichen Zweck wie Autorespulepool {...} in Cocoa?

Ich weiß, dass autorelease{} nicht das gleiche wie using(){} ist, weil Kakao verwendet ARC und C# verwendet GC. -> Is it necessary to use autoreleasepool in a Swift program?

Ich möchte nur von jemandem bestätigen, der beide verwendet hat, wenn sie tatsächlich den gleichen Zweck erfüllen.

Edit: Ich fand einen C# -Compiler von Drittanbietern, der diese Ideen zusammen zu überbrücken scheint.

RemObjects C# unterstützt auch die (selten benötigte) manuelle Deklaration von Auto-Release-Pools über die Syntax using (__autoreleasepool).

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

Does using(){...} in C# den gleichen Zweck wie autoreleasepool{...} in Cocoa dienen?

+0

Dieser Link sagt das: RemObjects C# hat auch Unterstützung für die (selten benötigte) manuelle Deklaration von Auto-Release-Pools über die Syntax (__autoreleasepool). – CodingYoshi

Antwort

3

Nein, sie sind anders.

C# 's using statement bezieht sich auf die Beschaffung und Entsorgung von Ressourcen. Dies ist normalerweise eine externe Ressource, z. B. eine Datei, bei der die Erfassung die Datei öffnet und die Entsorgung sie schließt.

In Objective-Cs Pool zur automatischen Freigabe wird die Lebensdauer von Objekten im Speicher gesteuert. Ein Objekt im Pool wird freigegeben, wenn der Pool leer ist, für den Standardpool am Ende jeder Iteration der Ereignisschleife.

+0

So, während der Autorespulepool kann auch Ressourcen als Nebeneffekt ihrer Objekte außerhalb des Geltungsbereichs freigeben; C# 's Verwendung() spezifische Verwendung ist es, Ressourcen zu entsorgen (Schließen von Verbindungen usw.), aber mit einem Nebeneffekt, GC wissen zu lassen, dass der Speicher des Objekts zurückgewonnen werden kann? – masters3d

+1

Nr. C# 'using' ist nicht direkt mit GC verbunden. Ressourcenerwerb * kann die Erstellung von Objekten beinhalten, muss nicht. Die Ressourcenentsorgung ruft 'Dispose()' auf, informiert GC nicht, dass das Objekt nicht länger benötigt wird, und das Objekt * kann * weiterhin verwendet werden. Ein Objekt, das "Disposable" implementiert, ist * nicht * erforderlich, um sein eigenes 'Dispose()' als Teil seines Finalisierers aufzurufen. Während typische Verwendungen von "using" die Zuweisung und Freigabe des Ressourcenobjekts beinhalten können, ist dies jedoch ein Verwendungsmuster und keine Anforderung. – CRD

Verwandte Themen