我正在尝试在objective-c 中创建一个可调整大小的CGPoints 数组。我已经研究过使用 NSMutableArray 但是它似乎不允许调整大小。还有什么我可以使用的吗?
谢谢你
我正在尝试在objective-c 中创建一个可调整大小的CGPoints 数组。我已经研究过使用 NSMutableArray 但是它似乎不允许调整大小。还有什么我可以使用的吗?
谢谢你
使用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
s,并且将 a 转换CGPoint
为 an很简单NSPoint
(您可以强制转换或使用NSPointFromCGPoint()
)。
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 方法都适用于它。