Iphone 如何使用Objective-C在数组中存储(x,y)坐标?

Iphone 如何使用Objective-C在数组中存储(x,y)坐标?,iphone,objective-c,Iphone,Objective C,我有一个Objective-C方法,它使用图像中的一些x和y值:image.center.x和image.center.y。每次调用此方法时,我都要将它们存储起来,所以我希望使用数组 如何做到这一点?我怀疑使用了NSMutableArray?您是正确的,因为要修改数组,您必须具有NSMutableArray类型 使用一个也不是非常困难: NSMutableArray* array = [NSMutableArray arrayWithCapacity:3]; [array addObject:f

我有一个Objective-C方法,它使用图像中的一些x和y值:
image.center.x
image.center.y
。每次调用此方法时,我都要将它们存储起来,所以我希望使用数组


如何做到这一点?我怀疑使用了NSMutableArray?

您是正确的,因为要修改数组,您必须具有NSMutableArray类型

使用一个也不是非常困难:

NSMutableArray* array = [NSMutableArray arrayWithCapacity:3];
[array addObject:firstObject];
[array addObject:secondObject];
[array addObject:thirdObject];

正如布拉德·拉森(Brad Larson)所指出的,这是为Mac电脑设计的,不是为iPhone设计的。

是的,
NSMutableArray
是最佳选择。但是,数组存储对象,而中心是一个结构

一种解决方案是用
NSValue
包装
center
结构:

yourArray = [NSMutableArray arrayWithCapacity:2]; //Don't worry, capacity expands automatically

[yourArray addObject:[NSValue valueWithPoint:image.center]];
//later
[[yourArray objectAtIndex:whatevs] pointValue];

(例如,这非常类似于用
NSNumber
包装
int
以存储在数组中。)

您有许多选项可以执行此操作

要记住的是,x和y值将是cgfloat(而image.center是CGPoint)。这些不是对象,不能直接添加到NSArray


您可以使用NSValue的valueWithPoint:和pointValue方法。如果要单独保存它们,可以通过执行[NSNumber numberWithFloat:x];,使用NSNumber;。或者,如果需要,可以使用C数组。

我建议将点存储在NSArray中,使用NSValue包装:

NSMutableArray *arrayOfPoints = [[NSMutableArray alloc] init];

[arrayOfPoints addObject:[NSValue valueWithCGPoint:image.center]];

// Do something with the array
[arrayOfPoints release];
这假设
image.center
是一个CGPoint结构(如果不是,可以使用
CGPointMake()
创建一个)

要提取CGPoint,只需使用

[[arrayOfPoints objectAtIndex:0] CGPointValue];

C数组是目标C的一个适当子集,并且产生的代码比使用COCKFoundation类更快,并且使用更少的内存。你可以加上:

CGPoint myPoints[MAX_NUMBER_OF_POINTS];
到您的实例变量;并将坐标保存到:

myPoints[i] = image.center;

请注意,
+valueWithPoint:
-pointValue
在iPhone上不存在,仅在Mac上存在。你可以在iPhone上使用
+valueWithCGPoint:
-CGPointValue
(从标签判断,他感兴趣的是什么),正如我在回答中所描述的。谢谢你;我不是iPhone er。+1如果你使用了很多积分,这可能是最好的方法,因为你不会无意中听到创建成吨的
NSValue
对象。谢谢大家。当然有很多选择。感谢您的帮助和代码解释!