2

コレクションクラスに格納する目的で、、などのCoreGraphics構造体ベースの値を適切なオブジェクトにCGRect格納するためのベストプラクティスは何ですか?CGPoint

次のいずれかを使用できますNSValue

    NSMutableArray *values = [NSMutableArray array];

    CGRect rect = CGRectMake(0, 0, 100, 100);
    NSValue *value = [NSValue valueWithCGRect:rect];

    [values addObject:value];

    CGRect rectValue = [values[0] CGRectValue];

またはNSString

    NSMutableArray *values = [NSMutableArray array];

    CGRect rect = CGRectMake(0, 0, 100, 100);
    NSString *string = NSStringFromCGRect(rect);

    [values addObject:string];

    CGRect rectValue = CGRectFromString(string);

私が欠けていたものがあり、一方が他方よりも有利であるかどうか疑問に思っています。

4

2 に答える 2

1

最初の方法は、メモリ内のフットプリントが小さく、変換を行うために多くのCPUを必要としないため、より「標準的」です。また、10進数への変換と逆変換による精度の低下の可能性はありません。s内のfloatstructはネイティブ形式で保存されます。

公平を期すために、何万ものオブジェクトを処理する必要がない限り、2つのアプローチの違いはごくわずかです。

于 2012-11-15T05:34:48.727 に答える
0

どちらのアプローチも有効です。の使用は、アプローチNSValueを使用するよりもはるかに効率的である可能性があります。NSString文字列処理は、一般に、で使用される単純なメモリコピーよりもはるかに低速ですNSValue

ほんの少ししかやっていないのなら、おそらく全体的には何の違いもありません。ただし、変換するものがたくさんある場合は、NSValueパフォーマンスを向上させる(より高速にする)ためのアプローチを採用してください。

于 2012-11-15T05:34:24.603 に答える