【问题标题】:How to define array of CGPoints within a struct definition?如何在结构定义中定义 CGPoints 数组?
【发布时间】:2013-11-09 01:09:15
【问题描述】:

我想这样做:

typedef struct
{
    CGPoint vertices[];
    NSUInteger vertexCount;
} Polygon;

但上面写着Field has incomplete type CGPoint []

【问题讨论】:

  • 你想做什么?通常,结构中间不能有可变大小的成员。

标签: ios objective-c arrays struct cgpoint


【解决方案1】:

设置数组大小CGPoint vertices[count];

【讨论】:

    【解决方案2】:

    您需要做以下两件事之一:

    1. 将数组声明为固定大小(可能不是您想要的)
    2. 使它成为一个指针。但是您需要根据需要正确地mallocfree 数组。

    更好的选择是不使用struct,而是创建一个完整的类。然后,您可以添加方法和属性,并使内存管理更加容易。您正在使用 Objective-C。利用语言的面向对象方面。添加一个计算周长和面积等的方法。把逻辑放在它所属的地方。

    【讨论】:

    • 还有a third option
    • @JesseRusak 你的意思是使用 C++ 吗?我的选择在 Objective-C 中。
    • 不,我的意思是将数组成员移动到结构的末尾并将其长度设为 0,然后分配比结构所需的空间更多的空间。在这种情况下,它既不是指针也不是固定大小。
    • 谢谢,但是为此创建对象还不够轻量级。 :D 只是整理了一些过去的代码,我真的不想引入任何新的东西,而是减少了。
    • @Geri 让它成为一个类并不能真正让它“更重”。该类的内存占用量只会比struct 大几个字节。
    【解决方案3】:

    您不希望结构的每个元素都具有唯一的名称吗?如果您只想要按数字顺序排列的一堆 CGPoint,并且能够计算其中有多少,那么最好将它们塞入 NSArray 或 NSMutableArray(当然存储为 NSValue)

    结构的重点是通过描述性名称轻松访问值,即:

    typedef struct {
        CGPoint helpfulAndDescriptiveNameOne;
        CGPoint helpfulAndDescriptiveNameTwoWhichIsDifferentThanTheOtherName;
        etc...
        NSUInteger vertexCount;
    }
    

    例如,一个 CGRect 只是一个由四个不同的 CGFloat 组成的结构,每个 CGFloat 都有描述性和有用的命名:

    typedef {
        CGFloat x;
        CGFloat y;
        CGFloat width;
        CGFloat height;
    } CGRect;
    

    【讨论】:

      猜你喜欢
      • 2012-07-27
      • 1970-01-01
      • 2012-10-20
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 2015-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多