将struct写入NSMutableArray

时间:2012-01-31 11:22:28

标签: objective-c arrays struct objective-c++

我有一个游戏对象,它在两个完全不同的地方处理。在Contact Listener中,我检查一些条件,如果它们发生,我必须保存一个或多个复杂数据部分。所以我决定使用struct。例如:

struct SomeStruct
{
    int value1;
    int value2;
    CGPoint value3;
    b2Vec2 value4;
};

typedef SomeStruct SomeStruct;

在游戏场景中,我浏览所有游戏对象,如果它的堆栈/数组不是空的,请做一些东西并擦拭它。

在Contact Listener中,它从头开始重复。

我必须使用这种架构,因为严格的执行顺序(必须在其他方法之后调用方法)。

我怀疑我需要像vector或NSMutableArray(我认为它不适用于struct),所以vector可能是唯一的方法。

但不明白如何实现它。您可以帮我一些代码/伪代码或链接到我可以找到解决方案的书/文章吗?

2 个答案:

答案 0 :(得分:3)

Cocoa为此目的提供NSValue类:

这会创建一个可以添加到NSMutableArray的对象:

NSValue *someObj = [NSValue valueWithBytes:&myStruct objCType:@encode(SomeStruct)];

您可以使用[someObj pointerValue]访问void*来表示您在NSValue中放置的结构的地址。

答案 1 :(得分:2)

这个问题有很多解决方案。

  1. 请勿使用struct。 obj-c类实际上与struct相同。
  2. 使用CFArrayCFArrayCreateMutable)并将其作为指针放在那里。
  3. 使用带有STL向量的C ++类。
  4. 使用C数组(SomeStruct[])并在需要时增加其长度。
  5. 使用堆栈的经典实现,带有链表(每个结构都有指向下一个值的指针)。