从NSArray初始化struct?

时间:2014-01-05 07:44:28

标签: ios objective-c struct nsarray

我正在尝试在我构建的应用中实现KD Tree,当前的示例是这样的:

struct kd_node_t {
    int trapID;
    double x[MAX_DIM];
    struct kd_node_t *left, *right;
};

struct kd_node_t wp[] =
    {
        {1, {2, 3}}, {1, {5, 4}}, {1, {9, 6}}, {1, {4, 7}}, {1, {8, 1}}, {1, {7, 2}}
    };

我正在尝试做的是动态地在结构中放置一个数组而不是像示例那样。 任何想法我该怎么做?

修改

我意识到问题应该是不同的 - >如何从NSArray数据初始化此特定结构?

2 个答案:

答案 0 :(得分:0)

你可以:

struct kd_node_t {
    NSArray *myArray
};

kd_node_t myStruct;
myStruct.myArray = [newArray retain];

它应该有用。

答案 1 :(得分:0)

如果您使用ARC,那么使用struct字段定义NSArray *并非易事,但如果您准备使用__unsafe_unretained引用,则可以这样做。

从您的问题中不清楚您出于某种原因需要使用struct。如果你这样做是为了获得“轻量级”结构,那么可以使用无方法类:

@interface KD_Node : NSObject
{
   int trapID;
   NSArray *x;
   KD_Node *left, *right;
}
@end

@implementation KD_Node
@end

除了分配之外,malloc()(或朋友)的调用被[KD_Node new]取代,使用KD_Node *就像使用struct kd_node_t *一样 - 字段(实例变量)使用->运算符引用。与直struct相比,存储量略有增加,但您可以毫无问题地使用NSArray *。 (当然,如果您愿意,也可以稍后添加属性和/或方法。)

HTH