Objective-C类似于C#使用?

Objective-C类似于C#使用?,c#,objective-c,using-statement,C#,Objective C,Using Statement,在C#中,我可以编写一个using语句,例如: using (SqlConnection connection = new SqlConnection("connectionString")) { ... } 这可以确保连接对象一旦超出范围就被释放。我想知道是否有办法在objective-c中实现这一点。我基本上有一个保持多个套接字打开的连接池,而不是每次使用连接时都需要打开和关闭连接,我可以进入连接池,获取一个打开的连接(或者根据需要创建一个新的连接),然后在使用完连接后将其释放回连

在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
的要求。我一直在做一些研究,但到目前为止,我已经干了。

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

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

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

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

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