5

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

谢谢你

4

2 回答 2

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 上需要此功能,则可以使用类似的方法来处理NSPoints,并且将 a 转换CGPoint为 an很简单NSPoint(您可以强制转换或使用NSPointFromCGPoint())。

于 2010-03-10T20:42:16.260 回答
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 方法都适用于它。

于 2010-03-10T20:30:52.907 回答