从 NSArray 初始化结构?
Posted
技术标签:
【中文标题】从 NSArray 初始化结构?【英文标题】:Initialize struct from NSArray? 【发布时间】:2014-01-05 07:44:28 【问题描述】:我正在尝试在我构建的应用程序中实现 KD 树,当前示例是这样的:
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 数据初始化这个特定的结构?
【问题讨论】:
为什么要使用NSArray
的实例? C 能够将动态大小的数组放入结构中。至少有两种方法。
【参考方案1】:
你可以:
struct kd_node_t
NSArray *myArray
;
kd_node_t myStruct;
myStruct.myArray = [newArray retain];
它应该可以工作。
【讨论】:
请注意,如果您使用自动引用计数 (ARC),这将无法编译。 ***.com/questions/11857117/… 这可以帮助基于 ARC 的应用程序。【参考方案2】:如果您使用 ARC,则使用 NSArray *
字段定义 struct
并非易事,但如果您准备使用 __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 *
- 使用@ 引用字段(实例变量) 987654330@ 运营商。与直接的struct
相比,存储开销很小,但您可以毫无问题地使用您的NSArray *
。 (当然,如果您愿意,您也可以稍后添加属性和/或方法。)
HTH
【讨论】:
以上是关于从 NSArray 初始化结构?的主要内容,如果未能解决你的问题,请参考以下文章
Objective C /iPhone:是不是可以重新初始化 NSArray?
NSDictionary 的 NSArray - 简单的初始化语法