私はNSDecimal、のNSNumber、NSNumberDecimal、CFNumberについて多くを読んで...、それは私にはジャングルのようなものであることを開始します。NSDecimal、NSDecimalNumber、CFNumber間の正しい選択とは何ですか?
基本的に、私はこの1つのように、簡単な計算を処理する単純なモデルクラスを作成しようとしています:
#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
とcomp.langのObjective-C Faqに関連する部分について読みました。
はまた、私はNSDecimalNumber
を使用する必要があることを理解し、私は知りたいのですが二つのものがあります:
- はやや複雑クラス(の唯一の金融計算のための許容可能なオーバーヘッドメモリとパフォーマンスの損失ですこの種は、UITableViewで示された)?私は
- は、それはあまりにも潔癖と複雑
decimalNumberByAdding:
のような機能を使用しないようにしたのは... Cに多くのバックグラウンドを持っていませんか? Pythonでは、オブジェクトを持つ演算子を使用するために__add__
を定義するのは簡単でした。私はその後の計算を行い、NSDecimalNumber
から値を取得し、フロートNSDecimalNumber
に包まれた結果を返すべきでしょうか?どのようにこの問題に対処しますか?
私はシンプルで美しい解決策を探しています!
同じエリアの別の質問:CFBoolean
iPhone Core FoundationのBOOL
のオブジェクトラッパーですか?
ありがとうございました!
ありがとう、私は実際に文字列からセレクタを作成する必要があります。 CFBooleanはBOOLを折り返すための正しいオブジェクトですか? – charlax
Cocoaでは、NSNumberを使用してオブジェクト内のBOOLをラップする必要があります。 '+ [NSNumber numberWithBool:]'を参照してください。 –