Frage

In C# kann ich eine Verwendung anhand von Anweisung schreiben, z. B.:

using (SqlConnection connection = new SqlConnection("connectionString"))
{
    ...
}

Dies stellt sicher, dass das Verbindungsobjekt entsorgt wird, sobald es aus dem Spielraum gegangen ist. Ich frage mich, ob es eine Möglichkeit gibt, dies innerhalb von Objective-C zu tun. Ich habe im Grunde einen Verbindungspool, der mehrere Sockets offen hält, anstatt jedes Mal, wenn ich sie verwende, zu öffnen und zu schließen. Ich kann in meinen Verbindungspool eintauchen, eine offene Verbindung holen (oder bei Bedarf eine neue erstellen). Lassen Sie die Verbindung wieder in den Pool los, sobald ich damit fertig bin. Mein Ziel-C-Code sieht derzeit so aus:

MyConnection * connection = [ConnectionPool ConnectionWithDetails: @"host/server/port/etc"];
[connection doSomething];
[ConnectionPool ReleaseConnection: connection];

Also, wenn aus irgendeinem Grund, ReleaseConnection Wird nicht angerufen, die Verbindung baumelt nur (sie wird irgendwann befreit, aber sie geht nicht in meinen Pool zurück).

Grundsätzlich suche ich nach einem Weg, wie ich die Anforderung zum Anruf beseitigen kann ReleaseConnection. Ich habe einige Nachforschungen angestellt, aber bisher bin ich trocken gekommen.

War es hilfreich?

Lösung

Sicher, Sie können a verwenden @try-@catch-@finally Block, mit dem @catch weggelassen.

MyConnection * connection = [ConnectionPool ConnectionWithDetails: @"host/server/port/etc"];
@try {
    [connection doSomething];
}
@finally {
    [ConnectionPool ReleaseConnection: connection];
}

Egal wie Sie das verlassen @try Block, die @finally Block läuft.

Andere Tipps

Sie können in Betracht ziehen, Blöcke zu verwenden. Anstatt eine Verbindung zu erstellen und sie zu verwenden, senden Sie stattdessen einen Block zum Verbindungspool. Der Pool führt den Block zum richtigen Zeitpunkt aus und übergibt alle erforderlichen Parameter (die Verbindung). Wenn der Block abgeschlossen ist, kann der Pool nach Bedarf aufräumen.

Nun, wenn Sie die Dosenmethode erstellen, können Sie im Anruf bei der [ConnectionPool -ReleaSConnection: Verbindung] entweder in Ihre Definition der Dosenmethode oder Sie einen optionalen Abschlussblock angeben, der diesen Anruf für Sie erfolgt

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top