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 回答
1

当然,您可以使用@try--块,@catch省略。@finally@catch

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

无论您如何退出该@try块,该@finally块都会运行。

于 2013-11-07T23:26:54.810 回答
0

好吧,如果您正在制作 doSomething 方法,您可以在对 [ConnectionPool ReleaseConnection: connection] 的调用中工作,或者将其放入 doSomething 方法的定义中,或者您可以提供一个可选的完成块来为您进行调用

于 2013-11-08T22:22:02.010 回答