我有一个Objective-C方法,它使用图像中的一些x和y值:image.center.x
和image.center.y
。我想在每次调用此方法时将它们存储起来,所以我希望使用数组。
如何做到这一点?我怀疑使用NSMutableArray?
答案 0 :(得分:12)
我建议将这些点存储在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];
答案 1 :(得分:6)
C数组是Objective C的适当子集,与使用Cocoa Foundation类相比,生成更快的代码并且通常使用更少的内存。你可以添加:
CGPoint myPoints[MAX_NUMBER_OF_POINTS];
到您的实例变量;并保存坐标:
myPoints[i] = image.center;
答案 2 :(得分:2)
正如Brad Larson指出的那样,这适用于Mac,不适用于iPhone。
是的,NSMutableArray
是最佳选择。但是,数组存储对象,而center是结构!
一种解决方案是用center
NSValue
结构
yourArray = [NSMutableArray arrayWithCapacity:2]; //Don't worry, capacity expands automatically
[yourArray addObject:[NSValue valueWithPoint:image.center]];
//later
[[yourArray objectAtIndex:whatevs] pointValue];
(这非常类似于,例如,用int
包裹NSNumber
以存储在数组中。)
答案 3 :(得分:2)
你有很多选择。
要记住的是x和y值将是CGFloats(而image.center是CGPoint)。这些不是对象,也不能直接添加到NSArray中。
您可以使用NSValue的valueWithPoint:和pointValue方法。如果要单独保存它们,可以通过[NSNumber numberWithFloat:x];来使用NSNumber。或者,如果需要,可以使用C数组。
答案 4 :(得分:1)
你是正确的,要修改数组,你必须有一个NSMutableArray类型。
使用它也不是非常困难:
NSMutableArray* array = [NSMutableArray arrayWithCapacity:3];
[array addObject:firstObject];
[array addObject:secondObject];
[array addObject:thirdObject];