将结构写入NSMutableArray
我有一个游戏对象在两个完全不同的地方处理。在Contact Listener中,我检查一些条件,如果它们发生,我必须保存一个或多个复杂数据部分。所以我决定使用结构。例如:将结构写入NSMutableArray
struct SomeStruct
{
int value1;
int value2;
CGPoint value3;
b2Vec2 value4;
};
typedef SomeStruct SomeStruct;
在游戏场景中我的经历,所有的游戏对象,如果它在栈/数组不是空的,做一些东西并擦拭。
在Contact Listener中,它从头开始重复。
由于严格的执行顺序(必须在其他方法之后调用方法),我必须使用此体系结构。
我怀疑我需要的东西像vector或NSMutableArray(我认为它不能用于结构),所以向量可能是唯一的方法。
但不明白如何实现它。你可以帮助我一些代码/伪代码或链接到书/文章,我可以找到解决方案吗?
这个问题有很多解决方案。
- 请勿使用
struct
。一个obj-c类与一个结构实际上是一样的。 - 使用
CFArray
(CFArrayCreateMutable
)并把它作为指针。 - 在STL向量中使用C++类。
- 使用C数组(
SomeStruct[]
)并在需要时增加其长度。 - 使用经典的堆栈实现,带有链表(每个结构都有一个指向下一个值的指针)。
可可提供NSValue
类用于这一目的:
这将创建一个对象,你可以添加到NSMutableArray
:
NSValue *someObj = [NSValue valueWithBytes:&myStruct objCType:@encode(SomeStruct)];
您可以使用[someObj pointerValue]
访问void*
代表结构的地址,你放入NSValue
。
抱歉,无法理解如何获得/改变某些结构元素... :( – maaboo 2012-01-31 12:59:44
值@maaboo转换'无效*'来的一个指针结构,并通过改变结构的字段' - > 'operator:'((SomeStruct *)[someObj pointerValue]) - > value2 = 5' – dasblinkenlight 2012-01-31 13:53:15
是的,可能只有变量的Obj-C类会有所帮助,我会尝试使用它。在这种情况下管理。 – maaboo 2012-01-31 12:57:35
'malloc'和'free' :)没有什么复杂的。 – Sulthan 2012-01-31 13:43:59