Objective c 将结构写入NSMutableArray

Objective c 将结构写入NSMutableArray,objective-c,arrays,struct,objective-c++,Objective C,Arrays,Struct,Objective C++,我有一个在两个完全不同的地方处理的游戏对象。在Contact Listener中,我检查一些情况,如果出现,我必须保存一部分或多部分复杂数据。所以我决定使用struct。例如: struct SomeStruct { int value1; int value2; CGPoint value3; b2Vec2 value4; }; typedef SomeStruct SomeStruct; 在游戏场景中,我浏览了所有游戏对象,如果堆栈/数组不是空的,那么做一

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

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

typedef SomeStruct SomeStruct;
在游戏场景中,我浏览了所有游戏对象,如果堆栈/数组不是空的,那么做一些事情并擦拭它

在Contact Listener中,它从一开始就重复

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

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


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

Cocoa为此提供了
NSValue
类:

这将创建一个对象,您可以将其添加到
NSMutableArray

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

您可以使用
[someObj pointerValue]
访问一个
void*
表示您放入
NSValue
中的结构的地址,该问题有很多解决方案

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

  • 是的,可能只有变量的Obj-C类会有所帮助。我会试着用它。在这种情况下,我对内存管理有点困惑。
    malloc
    free
    :)这并不复杂。很抱歉,无法理解如何获取/更改特定结构元素的值…:(@maaboo将
    void*
    转换为指向您的结构的指针,并通过
    ->
    操作符更改该结构的字段:
    ((SomeStruct*)[someObj pointerValue])->value2=5