1

次のようにCGポイント配列を作成しました。

NSMutableArray *_startPositions = [NSMutableArray array];
[_startPositions addObject:[NSValue valueWithCGPoint:CGPointMake(0.0, 0.0)]];
[_startPositions addObject:[NSValue valueWithCGPoint:CGPointMake(0.0, 0.0)]];

配列内のポイントのx値とy値を最も効率的に変更するにはどうすればよいですか?

次を使用して値を取得する場合:

CGPoint myPoint0 = [[_startPositions objectAtIndex:0] CGPointValue];

ポイントのコピーを取り戻します。配列内のCGPointのx値とy値を変更するにはどうすればよいですか?任意の位置でCGPointを削除して、正しいx、y値を持つものに置き換えることができますが、より効率的な方法はありますか?

4

4 に答える 4

0

NSMutableArrayの代わりにC配列を使用してください。必要に応じて、std::vectorやその他のC/C++コレクションライブラリなどのC++STLコレクションクラスを使用します。このようにして、Obj-Cメソッドを呼び出さずに配列の内容を操作できます。

于 2012-12-21T05:12:10.940 に答える
0

独自のクラスを作成することをお勧めします

.h

@interface MyPoint : NSObject {
    CGPoint point;
}
@property (nonatomic,assign) CGPoint point;
@end

.m

@implementation MyPoint
@synthesize point;
@end

MyPoint次に、オブジェクトを配列に追加します。
次のように変更します

MyPoint *myPoint = [_startPositions objectAtIndex:0];
myPoint.point = myPoint0;
于 2012-12-21T05:33:51.543 に答える
0

ドキュメントから:

NSValueオブジェクトは常に不変です。

したがって、ここでの唯一のオプションは、値が変更さNSValueれたときに古いものを置き換えるために新しいものを作成することです。CGPointの配列を格納するためのより効率的な方法を探している場合はCGPoints、C配列が最も簡単で最速の方法です。

于 2012-12-21T09:02:42.280 に答える
0

CGPointの「x」または「y」の値だけを変更する場合は、次のpointように実行できます。

((CGPoint *)&point)->x += dx;

また

((CGPoint *)&point)->y += dy;

于 2020-01-11T04:57:49.630 に答える