我正在尝试在objective-c中创建一个可重复大小的CGPoints数组。我已经研究过使用NSMutableArray,但它似乎不允许调整大小。还有其他我可以使用的东西吗?
谢谢
答案 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方法都适用于它。