1

可能重复:
将 c-struct 放入 NSArray 的最佳方法是什么?

如何在 NSMutableArray 中使用 struct?

4

1 回答 1

2

你不能。Foundation 中的所有集合都只能存储 Objective-C 对象。由于 astruct不是 Objective-C 对象,因此不能将其存储在其中。

但是您可以将您的子类包装struct成一个简单的NSObject子类并将其存储在数组中。

或与NSValue

#import <Foundation/Foundation.h>

struct TestStruct {
    int a;
    float b;
};

...

NSMutableArray *theArray = [NSMutableArray new];    

...

struct TestStruct *testStructIn = malloc(sizeof(struct TestStruct));
testStructIn->a = 10;
testStructIn->b = 3.14159;

NSValue *value = [NSValue valueWithBytes:testStructIn objCType:@encode(struct TestStruct)];
[theArray addObject:value];

free(testStructIn);

...

struct TestStruct testStructOut;
NSValue *value = [theArray objectAtIndex:0];
[value getValue:&testStructOut];

NSLog(@"a = %i, b = %.5f", testStructOut.a, testStructOut.b);

顺便说一句,没有真正的理由为什么要分配一个结构并分配一个堆栈。只是想我会这样做以表明它有效。

于 2013-01-28T18:57:48.840 回答