在 Objective-C 中创建可调整大小的 CGPoints 数组

发布于 2024-08-24 06:10:29 字数 111 浏览 15 评论 0原文

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

谢谢

I am trying to create a re-sizable array of CGPoints in objective-c. I've have looked into using NSMutableArray however it doesnt seem to allow resizing. Is there something else I can use?

thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

女皇必胜 2024-08-31 06:10:29

使用 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())。

Use an NSMutableArray, but just box your CGPoint structs in NSValue objects. Example:

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];

Note that the +valueWithCGPoint: and CGPointValue methods are only available on the iPhone. However if you need this for the Mac, there are similar methods for dealing with NSPoints, and it's trivial to convert a CGPoint to an NSPoint (you can cast or use NSPointFromCGPoint()).

云醉月微眠 2024-08-31 06:10:29

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];

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

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

将数组增长 n 个对象:

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

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

NSMutableArray is for objects. For plain old datatypes, use NSMutableData and good old pointer typecasts. It's a resizable unstructured memory buffer, just what you need for a vector of PODs. As for static type safety, Objective C does not give you any of that anyway.

EDIT:

Creating a mutable data object with an initial size n CGPoint structs:

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

Placing a CGPoint pt into the buffer at the i-th position:

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

Retrieving a CGPoint from the i-th position into pt:

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

Growing the array by n objects:

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

Hope that covers it. See the NSMutableData reference, and keep in mind that all NSData methods apply to it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文