在Cocoa中创建结构数组的最简单方法是什么?
如果你想使用NSArray,你需要装箱你的结构.您可以使用NSValue类对它们进行编码.
像这样编码:
struct foo { int bar; }; struct foo foobar; foobar.bar = 3; NSValue *boxedFoobar = [NSValue valueWithBytes:&foobar objCType:@encode(struct foo)];
然后把它拿回来:
struct foo newFoobar; if (strcmp([boxedFoobar objCType], @encode(struct foo)) == 0) [boxedFoobar getValue:&newFoobar];
或者动态分配:
struct foo { int bar; }; int main (int argc, const char * argv[]) { struct foo *foobar = malloc(sizeof(struct foo) * 3); foobar[0].bar = 7; // or foobar->bar = 7; free(foobar); }
如果你对普通的旧C数组没问题:
struct foo{ int bar; }; int main (int argc, const char * argv[]) { struct foo foobar[3]; foobar[0].bar = 7; }
如果你想要一个NSArray,你需要一个包装器对象.大多数原语使用NSNumber,但这可能不适用于您的结构.包装器写起来并不是很难,尽管这样会破坏使用结构的目的!
编辑:这是我没有做过但只是想到的事情.如果你考虑一下,NSDictionary基本上是一个对象的结构.您的键可以是NSStrings的结构组件的名称,您的值可以是适用的Cocoa包装器中包含的相应数据类型.然后把这些词典放在NSArray中.
我想要的是,你有很多选择.如果我是你,我会做一些实验,看看什么效果最好.