2010-03-30 10 views
11

Estamos escribiendo una API para desarrolladores de iphone y no sabemos cuál es la mejor práctica para el manejo de excepciones. Nos fijamos en NSError, modo estándar POSIX, NSException¿Cuáles son las mejores prácticas para el manejo de errores al escribir una API para el iphone?

¿Cuál es la convención que utilizan la mayoría de las API? ¿Cuál es el más "objetivo-C amigable"?

+0

Esta pregunta puede ser un duplicado de http://stackoverflow.com/questions/1503348/returning-errors-in-objective-c y http://stackoverflow.com/questions/2169728/how-should-i- handle-errors-in-an-api –

Respuesta

14

Desde el Introduction to Exception Programming Topics:

Importante: Se debe reservar el uso de excepciones para la programación o de tiempo de ejecución inesperado errores como fuera de los límites de acceso de recogida, los intentos para mutar objetos inmutables, el envío de un inválido mensaje, y perder la conexión al servidor de ventana. Por lo general, se ocupa de este tipo de errores con excepciones cuando se crea una aplicación en lugar de hacerlo en tiempo de ejecución.

...

En lugar de excepciones, objetos de error (NSError) y el mecanismo de error de suministro de cacao son la forma recomendada para comunicar los errores que se esperan de las aplicaciones Cocoa. Para más información, vea Error Handling Programming Guide For Cocoa.

Por lo que entiendo, solo use excepciones cuando algo sea fatalmente incorrecto. De lo contrario, use NSError objetos.

2

+1 para NSError.

Olvidé en qué lugar de los documentos Apple leí esto, pero también recuerdo que fomentan la filosofía de codificación de "probar primero, luego verificar errores", en lugar de "verificar validez, luego hacer la operación". Por ejemplo, en lugar de ver si la red está disponible antes de usarla, intente utilizarla y responda a un error si/cuando recibe una.

Estoy de acuerdo con esta filosofía para muchos casos de uso porque (a) mueve la comprobación de validez al momento de la acción, así que en cierto sentido es más precisa, y (b, subjetiva) es más divertido trabajar con código este patrón

En resumen, la sugerencia es utilizar NSError, y para proporcionar comentarios inmediatos con NSError** parámetros que aceptan NULL, para ser muy amigables con los usuarios de la API. Este patrón también se establece en varios lugares en Cocoa/Touch; por ejemplo, el NSString método writeToFile:atomically:encoding:error:.

Cuestiones relacionadas