質問

C#で:次のような使用ステートメントを書くことができます。

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. 。私はいくつかの研究をしてきましたが、これまでのところ私は乾燥しました。

役に立ちましたか?

解決

確かに、aを使用できます @try-@catch-@finally ブロック、 @catch 省略。

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

どのように終了しても @try ブロック、 @finally ブロックが実行されます。

他のヒント

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

さて、あなたが[ConnectionPool ReleseConnection:Connection]への呼び出しで作業することができる場合、あなたはあなたの呼び出しを呼びかけるオプションの完了ブロックを提供することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top