在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. 。我一直在进行一些研究,但是到目前为止,我已经干了。

有帮助吗?

解决方案

当然,您可以使用 @try-@catch-@finally 街区,带有 @catch 省略。

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

无论您如何退出 @try 块, @finally 块将运行。

其他提示

您可以考虑使用块,因此不要创建连接并使用它,而是将块提交到连接池。池在适当的时间运行块,并传递任何必需的参数(连接)。当块完成时,池可以根据需要清理。

好吧,如果您正在制作滴定方法,则可以在[Connectionpool Releaseconeconnection:connection]的呼叫中工作,要么在您对滴定方法的定义中,或者您可以提供一个可选的完成块,以使您呼叫您

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top