Pergunta

Em C#, posso escrever uma declaração usando como:

using (SqlConnection connection = new SqlConnection("connectionString"))
{
    ...
}

Isso garante que o objeto de conexão seja descartado depois de sair do escopo. Estou me perguntando se existe uma maneira de fazer isso no Objective-C. Eu basicamente tenho um pool de conexão que mantém vários soquetes abertos, em vez de precisar abrir e fechar uma conexão toda vez que eu a uso, posso mergulhar no meu pool de conexão, pegar uma conexão aberta (ou criar um novo, se necessário), então Libere a conexão de volta à piscina assim que terminar. Meu código Objective-C atualmente se parece com o seguinte:

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

Então, se por algum motivo, ReleaseConnection Não é chamado, a conexão está apenas pendurada (ela será libertada eventualmente, mas não volta à minha piscina).

Basicamente, estou procurando uma maneira de eliminar o requisito de ligar ReleaseConnection. Eu tenho feito algumas pesquisas, mas até agora cheguei seco.

Foi útil?

Solução

Claro, você pode usar um @try-@catch-@finally bloco, com o @catch omitido.

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

Não importa como você sai do @try bloco, o @finally O bloco será executado.

Outras dicas

Você pode considerar o uso de blocos; portanto, em vez de criar uma conexão e usá -la, você enviaria um bloco para o pool de conexões. O pool executa o bloco no momento apropriado e passa os parâmetros necessários (a conexão). Quando o bloco concluir a piscina pode limpar conforme necessário.

Bem, se você estiver fazendo o método do dosomething, poderá trabalhar na chamada para o [ConnectionPool ReleaseSeconnection: Connection] na sua definição do método do Dosomething, ou você pode fornecer um bloco de conclusão opcional que faz com que isso seja necessário para você

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top