estoy trabajando en portar una base de código Java a Cocoa/Objective-C para su uso en el escritorio código de Mac OS X. El Java tiene mucha y mucha de métodos con excepciones comprobadas como:Al transferir código Java a ObjC, ¿cuál es la mejor forma de representar las excepciones marcadas?
double asNumber() throws FooException {
...
}
Lo que es la mejor manera de representarlos en Objective-C? ¿Excepciones o errores de parámetros?
- (CGFloat)asNumber {
... // possibly [FooException raise:format:];
}
o
- (CGFloat)asNumberError:(NSError **)outError {
...
}
tengo la sensación de que fuera errores son generalmente la mejor solución para Objective-C, pero como se puede ver ... una gran cantidad de métodos como el anterior se ser bastante incómodo. Y nuevamente, hay lotes de estos.
Por supuesto que tener en cuenta que, dado que estos son comprobado excepciones en Java, que tendrá que añadir ya sea @try
bloques o if (*outError) {...}
cheques siempre que se llaman estos métodos ( un montón de lugares).
Recuerdo que al entrar en @try
bloques era una vez costoso en Objective-C, es barato en 64 bits o SL o algún otro env nuevo (no recuerdo exactamente). No estoy para nada preocupado por la compatibilidad con versiones anteriores, así que estoy definitivamente dispuesto a diseñar solo para el nuevo hotness.
para quienes me sigan en casa, he decidido incluir errores y seguir los consejos NSScanner de Quinn. entonces este método particular sería algo como: '- (BOOL) getNumber: (CGFloat *) outNum error: (NSError **) outErr;' –
@olliej señala correctamente que los bloques @try son de "costo cero" en el tiempo de ejecución Moderno (64 bits y iPhone), pero las excepciones aún cuestan cuando las lanzas. Además, puede usar 'double' en lugar de' CGFloat' si lo desea. Vaya con las mejores prácticas para el entorno en el que se encuentra y el código con el que se integra. –