He leído mucho sobre NSDecimal, NSNumber, NSNumberDecimal, CFNumber ... y comienza a ser una especie de jungla para mí.¿Cuál es la elección correcta entre NSDecimal, NSDecimalNumber, CFNumber?
Básicamente, estoy tratando de crear una sencilla clase de modelo que se encargará de cálculos simples, como éste:
#import <Foundation/Foundation.h>
@interface Test : NSObject
{
float rate;
float amount;
int duration;
}
- (float)capitalizedAmount;
@end
@implementation Test
- (float)capitalizedAmount {
return (amount*pow((1.0+rate),duration));
}
@end
que desee acceder a estos métodos y definidores con sus nombres como cadenas, ya que planeo tener muchas otras clases como esta, y solo estoy manteniendo una lista de campos para hacer la codificación de valor clave.
// This is just the desired behavior
// This evidently won't work with the previous class definition
Test *obj = [[Test alloc] init];
[NSNumber numberWithInt:10]
...
float r;
r = [obj performSelector:NSSelectorFromString(@"capitalizedAmount")];
entiendo que esto no es posible, que performSelector:
volverá un objeto, y por lo tanto que capitalizedAmount
debe devolver un objeto. He leído cosas sobre NSInvocation
y la parte correspondiente en Objective-C Faq en comp.lang.
también entiendo que debo utilizar NSDecimalNumber
, pero hay dos cosas que me gustaría saber:
- son la sobrecarga de memoria y pérdida de rendimiento aceptable para una clase algo más complicado (sólo cálculos financieros de este tipo, se muestra en una UITableView)? No tengo mucha experiencia en C ...
- ¿No es demasiado fastidioso y complicado utilizar funciones como
decimalNumberByAdding:
? Con Python fue fácil definir__add__
para usar operadores con objetos. ¿Debo obtener valores flotantes deNSDecimalNumber
, luego hacer los cálculos y devolver el resultado envuelto en unNSDecimalNumber
? ¿Cómo lidiarías con este problema?
¡Estoy buscando una solución simple y hermosa!
Otra pregunta más en la misma área: ¿es CFBoolean
el contenedor de objetos para BOOL
en iPhone Core Foundation?
¡Muchas gracias por su ayuda!
Gracias por su respuesta, efectivamente necesito crear selectores de cadena. ¿Es el CFBoolean el objeto correcto para envolver BOOL? – charlax
En Cocoa, debe usar NSNumber para ajustar un BOOL en un objeto. Ver '+ [NSNumber numberWithBool:]'. –