Я много читал о NSDecimal, NSNumber, NSNumberDecimal, CFNumber ... и он стал для меня своего рода джунглями.Каков правильный выбор между NSDecimal, NSDecimalNumber, 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?
Большое вам спасибо за помощь!
Спасибо за ваш ответ, мне действительно нужно создать селектор из строки. Является ли CFBoolean правильным объектом для упаковки BOOL? – charlax
В какао вы должны использовать NSNumber для обертывания BOOL в объекте. См. '+ [Номер NSNumberWithBool:]'. –