【发布时间】:2009-11-09 22:50:21
【问题描述】:
我已经阅读了很多关于 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 应该返回一个对象。我在 comp.lang 上的 Objective-C 常见问题解答中阅读了有关 NSInvocation 和相关部分的内容。
我也明白我应该使用NSDecimalNumber,但有两件事我想知道:
- 对于更复杂的类(只有这种财务计算,在 UITableView 中显示)是否可以接受内存开销和性能损失?我没有太多的 C 语言背景...
- 使用
decimalNumberByAdding:这样的函数是不是太挑剔和复杂了?使用 Python 很容易定义__add__以将运算符与对象一起使用。我是否应该从NSDecimalNumber获取浮点值,然后进行计算并返回包装在NSDecimalNumber中的结果?您将如何处理这个问题?
我正在寻找一个简单而漂亮的解决方案!
同一领域的另一个问题:CFBoolean 是 iPhone Core Foundation 上BOOL 的对象包装器吗?
非常感谢您的帮助!
【问题讨论】:
标签: iphone objective-c cocoa key-value-coding