我构建了一个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,但是有更有效的方法吗?
答案 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;