Pregunta

En C# puedo escribir una declaración de uso como:

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

Esto asegura que el objeto de conexión se elimine una vez que se ha quedado de alcance. Me pregunto si hay una manera de hacer esto dentro de Objective-C. Básicamente, tengo un grupo de conexión que mantiene abiertos múltiples enchufes, en lugar de necesitar abrir y cerrar una conexión cada vez que lo uso, puedo sumergirme en mi grupo de conexión, tomar una conexión abierta (o crear una nueva si es necesario), luego. Vuelva a soltar la conexión a la piscina una vez que termine con ella. Mi código Objective-C actualmente se parece a esto:

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

Entonces, si por alguna razón, ReleaseConnection No se llama, la conexión está colgando (eventualmente se liberará, pero no vuelve a mi piscina).

Básicamente, estoy buscando una forma en que pueda eliminar el requisito de llamar ReleaseConnection. He estado investigando un poco, pero hasta ahora me he secado.

¿Fue útil?

Solución

Claro, puedes usar un @try-@catch-@finally bloque, con el @catch omitido.

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

No importa cómo salgas el @try bloque, el @finally Bloque se ejecutará.

Otros consejos

Podría considerar usar bloques, por lo que en lugar de crear una conexión y usarla, en su lugar enviaría un bloque al grupo de conexión. El grupo ejecuta el bloque en el momento apropiado y pasa los parámetros requeridos (la conexión). Cuando el bloque completa, el grupo puede limpiar según sea necesario.

Bueno, si está haciendo el método de dos años, podría trabajar en la llamada a la [ConnectionPool ReleaseConnection: Connection] en su definición del método de dos años, o podría proporcionar un bloque de finalización opcional que le haga esa llamada para usted

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top