将结构写入NSMutableArray

问题描述:

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

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

typedef SomeStruct SomeStruct; 

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

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

由于严格的执行顺序(必须在其他方法之后调用方法),我必须使用此体系结构。

我怀疑我需要的东西像vector或NSMutableArray(我认为它不能用于结构),所以向量可能是唯一的方法。

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

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

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

是的,可能只有变量的Obj-C类会有所帮助,我会尝试使用它。在这种情况下管理。 – maaboo 2012-01-31 12:57:35

+0

'malloc'和'free' :)没有什么复杂的。 – Sulthan 2012-01-31 13:43:59

可可提供NSValue类用于这一目的:

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

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

您可以使用[someObj pointerValue]访问void*代表结构的地址,你放入NSValue

+0

抱歉,无法理解如何获得/改变某些结构元素... :( – maaboo 2012-01-31 12:59:44

+0

值@maaboo转换'无效*'来的一个指针结构,并通过改变结构的字段' - > 'operator:'((SomeStruct *)[someObj pointerValue]) - > value2 = 5' – dasblinkenlight 2012-01-31 13:53:15