Я много читал о NSDecimal, NSNumber, NSNumberDecimal, CFNumber ... и это начинает казаться мне чем-то вроде джунглей.
По сути, я пытаюсь создать простой класс модели, который будет обрабатывать простые вычисления, например этот:
#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
Я хочу получить доступ к этим методам и сеттерам с их именами в виде строк, поскольку я планирую иметь много других классов, подобных этому, и я храню только список полей для кодирования значений ключа.
// 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")];
Я понимаю, что это невозможно, что performSelector:
вернет объект, и поэтому capitalizedAmount
должен вернуть объект. Я читал кое-что о NSInvocation
и соответствующей части в Objective-C Faq на comp.lang.
Я также понимаю, что мне следует использовать NSDecimalNumber
, но я хотел бы знать две вещи:
- Допустимы ли накладные расходы на память и потеря производительности для несколько более сложного класса (только финансовые вычисления такого рода, показанные в UITableView)? У меня не очень большой опыт в C ...
- Не слишком ли привередливо и сложно использовать такие функции, как
decimalNumberByAdding:
? В Python было легко определить__add__
для использования операторов с объектами. Должен ли я получать значения с плавающей запятой изNSDecimalNumber
, затем выполнять вычисления и возвращать результат, завернутый вNSDecimalNumber
? Как бы вы справились с этой проблемой?
Ищу простое и красивое решение!
Еще один вопрос из той же области: CFBoolean
объектная оболочка для BOOL
в iPhone Core Foundation?
Спасибо большое за помощь!