在CGPoint阵列中更改CGPoint值的最有效方法是什么?

时间:2012-12-21 04:48:59

标签: objective-c nsmutablearray nsarray

我构建了一个CG Point数组,如下所示:

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];

我得到了这一点的副本。如何更改数组中CGPoints的x和y值?我可以在任何位置移除CGPoint并将其替换为具有正确x,y值的CGPoint,但是有更有效的方法吗?

4 个答案:

答案 0 :(得分:0)

使用C数组而不是NSMutableArray。如果需要,使用C ++ STL集合类,如std :: vector或其他C / C ++集合库。通过这种方式,您可以在不进行任何Obj-C方法调用的情况下操作数组内容。

答案 1 :(得分: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;

答案 2 :(得分:0)

来自文档:

  

NSValue个对象总是不可变的。

因此,您唯一的选择是在NSValue值更改时创建新的CGPoint以替换旧的CGPoints。如果您正在寻找一种更有效的方法来存储{{1}}数组,那么C数组是最简单,最快捷的方法。

答案 3 :(得分:0)

如果仅更改CGPoint point的'x'或'y'值,则可以执行以下操作:

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

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