0

C# では、次のような using ステートメントを記述できます。

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

これにより、接続オブジェクトがスコープ外になると確実に破棄されます。Objective-C内でこれを行う方法があるかどうか疑問に思っています。私は基本的に、複数のソケットを開いたままにする接続プールを持っています。使用するたびに接続を開いたり閉じたりする必要はありません。接続プールに浸り、開いている接続を取得 (または必要に応じて新しい接続を作成)接続が完了したら、接続を解放してプールに戻します。現在、私の Objective-C コードは次のようになっています。

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

したがって、何らかの理由でReleaseConnectionが呼び出されない場合、接続はぶら下がっているだけです (最終的には解放されますが、プールには戻りません)。

基本的に、 を呼び出す必要をなくす方法を探していますReleaseConnection。私はいくつかの研究を行ってきましたが、これまでのところ私は乾いています。

4

3 に答える 3

1

ブロックの使用を検討できるため、接続を作成して使用する代わりに、接続プールにブロックを送信します。プールは適切なタイミングでブロックを実行し、必要なパラメーター (接続) を渡します。ブロックが完了すると、必要に応じてプールをクリーンアップできます。

于 2013-11-07T23:21:12.487 に答える
0

doSomething メソッドを作成している場合は、 [ConnectionPool ReleaseConnection: connection] の呼び出しで doSomething メソッドの定義に組み込むか、その呼び出しを行うオプションの完了ブロックを提供できます。

于 2013-11-08T22:22:02.010 に答える