在objective-c中创建一个可调整大小的CGPoints数组

时间:2010-03-10 20:28:45

标签: objective-c arrays vector resizable

我正在尝试在objective-c中创建一个可重复大小的CGPoints数组。我已经研究过使用NSMutableArray,但它似乎不允许调整大小。还有其他我可以使用的东西吗?

谢谢

2 个答案:

答案 0 :(得分:21)

使用NSMutableArray,但只需在CGPoint个对象中打包NSValue结构。例如:

CGPoint myPoint = {0,0};
CGPoint anotherPoint = {42, 69};

NSMutableArray * array = [NSMutableArray array];
[array addObject:[NSValue valueWithCGPoint:myPoint]];
[array addObject:[NSValue valueWithCGPoint:anotherPoint]];

CGPoint retrievedPoint = [[array objectAtIndex:0] CGPointValue];

请注意,+valueWithCGPoint:CGPointValue方法仅适用于iPhone。但是,如果您需要使用Mac,那么处理NSPoint的方法也类似,将CGPoint转换为NSPoint是很简单的(您可以使用NSPointFromCGPoint() }})。

答案 1 :(得分:2)

NSMutableArray用于对象。对于普通的旧数据类型,请使用NSMutableData和旧的指针类型转换。它是一个可调整大小的非结构化内存缓冲区,正是POD向量所需要的。至于静态类型的安全性,Objective C无论如何都不会给你任何。

编辑:

创建一个初始大小为n CGPoint结构的可变数据对象:

NSMutableData *Data = [NSMutableData dataWithLength: n*sizeof(CGPoint)];

将CGPoint pt放入第i个位置的缓冲区:

CGPoint pt;
NSRange r = {i*sizeof(CGPoint), sizeof(CGPoint)};
[Data replaceBytesInRange: r withBytes:&pt];

从第i个位置检索CGPoint到pt:

CGPoint pt;
NSRange r = {i*sizeof(CGPoint), sizeof(CGPoint)};
[Data getBytes: &pt range:r];

用n个对象增长数组:

[Data increaseLengthBy:n*sizeof(CGPoint)];

希望涵盖它。请参阅NSMutableData引用,并记住所有NSData方法都适用于它。