Dado un objeto NSLocking
Cacao (como un NSLock
) y algo de código no trivial para ser ejecutado mientras se mantiene el bloqueo:¿El uso de NSLocking siempre debe estar en @ try/@ finalmente?
Para garantizar un bloqueo está siempre puesto en libertad, siempre se debe utilizar la siguiente expresión idiomática?
NSLock *mutex = // get lock from somewhere
@try {
[mutex lock];
// do non-trivial stuff
}
@finally {
[mutex unlock];
}
Esto parece prudente (y común en Java), pero no he visto ningún código Cacao hacer esto.
¿Se debe usar este modismo? ¿Por qué o por qué no?
Una cosa que vale la pena mencionar es que la naturaleza de las excepciones en Cocoa es bastante peculiar en comparación con otros lenguajes/bibliotecas. Las excepciones de cacao son (en su mayor parte) planteadas en situaciones donde el problema podría haberse evitado programáticamente sin controladores de excepción (p.fuera de límites probando límites antes de leer un elemento de matriz) o el problema es difícilmente recuperable (por ejemplo, un selector no válido enviado a objeto o se ha perdido la conexión al servidor de ventana). –
@Bavarious Sí, buen punto: escribíamos al mismo tiempo (estaba actualizando/expandiendo la respuesta mientras escribía su comentario). – justin