5

Objective-cでサイズ変更可能なCGPointの配列を作成しようとしています。NSMutableArrayの使用を検討しましたが、サイズ変更ができないようです。他に使えるものはありますか?

ありがとうございました

4

2 に答える 2

21

を使用しますが、構造体をオブジェクトNSMutableArrayにボックス化するだけです。例:CGPointNSValue

CGPoint myPoint = {0,0};
CGPoint anotherPoint = {42, 69};

NSMutableArray * array = [NSMutableArray array];
[array addObject:[NSValue valueWithCGPoint:myPoint]];
[array addObject:[NSValue valueWithCGPoint:anotherPoint]];

CGPoint retrievedPoint = [[array objectAtIndex:0] CGPointValue];

+valueWithCGPoint:メソッドとCGPointValueメソッドは iPhone でのみ使用できることに注意してください。ただし、Mac でこれが必要な場合は、s を処理する同様の方法があり、aを anNSPointに変換するのは簡単です (キャストまたは使用できます)。CGPointNSPointNSPointFromCGPoint()

于 2010-03-10T20:42:16.260 に答える
2

NSMutableArrayはオブジェクト用です。プレーンな古いデータ型の場合は、NSMutableDataと古き良きポインター型キャストを使用します。これは、サイズ変更可能な非構造化メモリバッファであり、PODのベクトルに必要なものです。静的型安全性に関しては、ObjectiveCはとにかくそれを提供しません。

編集:

初期サイズnのCGPoint構造体を使用した可変データオブジェクトの作成:

NSMutableData *Data = [NSMutableData dataWithLength: n*sizeof(CGPoint)];

CGPointptをバッファのi番目の位置に配置します。

CGPoint pt;
NSRange r = {i*sizeof(CGPoint), sizeof(CGPoint)};
[Data replaceBytesInRange: r withBytes:&pt];

i番目の位置からptへのCGPointの取得:

CGPoint pt;
NSRange r = {i*sizeof(CGPoint), sizeof(CGPoint)};
[Data getBytes: &pt range:r];

n個のオブジェクトで配列を拡張します。

[Data increaseLengthBy:n*sizeof(CGPoint)];

それをカバーすることを願っています。NSMutableDataリファレンスを参照し、すべてのNSDataメソッドがそれに適用されることに注意してください。

于 2010-03-10T20:30:52.907 に答える