Objective-C类似于C#使用?
在C#中,我可以编写一个using语句,例如:Objective-C类似于C#使用?,c#,objective-c,using-statement,C#,Objective C,Using Statement,在C#中,我可以编写一个using语句,例如: using (SqlConnection connection = new SqlConnection("connectionString")) { ... } 这可以确保连接对象一旦超出范围就被释放。我想知道是否有办法在objective-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
块都将运行。如果您正在创建doSomething方法,您可以在调用[ConnectionPool ReleaseConnection:connection]时工作,或者将其放入doSomething方法的定义中,或者,您可以提供一个可选的完成块来为您进行该调用