创建结构数组的最简单方法是什么?

Ste*_*ion 18 cocoa objective-c

在Cocoa中创建结构数组的最简单方法是什么?

Ash*_*ark 44

如果你想使用NSArray,你需要装箱你的结构.您可以使用NSValue类对它们进行编码.

像这样编码:

struct foo {
    int bar;
};

struct foo foobar;
foobar.bar = 3;
NSValue *boxedFoobar = [NSValue valueWithBytes:&foobar objCType:@encode(struct foo)];
Run Code Online (Sandbox Code Playgroud)

然后把它拿回来:

struct foo newFoobar;

if (strcmp([boxedFoobar objCType], @encode(struct foo)) == 0)
    [boxedFoobar getValue:&newFoobar];
Run Code Online (Sandbox Code Playgroud)


Geo*_*lly 20

或者动态分配:

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);
}
Run Code Online (Sandbox Code Playgroud)


Ric*_*ano 11

如果你对普通的旧C数组没问题:

struct foo{
    int bar;
};

int main (int argc, const char * argv[]) {
    struct foo foobar[3];
    foobar[0].bar = 7;
}
Run Code Online (Sandbox Code Playgroud)

如果你想要一个NSArray,你需要一个包装器对象.大多数原语使用NSNumber,但这可能不适用于您的结构.包装器写起来并不是很难,尽管这样会破坏使用结构的目的!

编辑:这是我没有做过但只是想到的事情.如果你考虑一下,NSDictionary基本上是一个对象的结构.您的键可以是NSStrings的结构组件的名称,您的值可以是适用的Cocoa包装器中包含的相应数据类型.然后把这些词典放在NSArray中.

我想要的是,你有很多选择.如果我是你,我会做一些实验,看看什么效果最好.