6

可能重复:
如何将 Struct 包装到 NSObject
新的 Clang Objective-C 文字可以重定向到自定义类吗?

我有一个自定义结构:

typedef struct {
    float f1;
    float f2;
} MYCustomStruct;

我需要添加到NSArray. 我已经编写了一个类别来创建NSValues这些结构,然后将其添加到 中NSArray,但是如果可能的话,我想进一步使用盒装表达式来简化它。我很想能够做到这一点:

@[@(instanceOfMYCustomStruct)];

但是,我遇到以下错误:

盒装表达式中使用了非法类型“MYCustomStruct”

有没有办法将盒装表达式与自定义结构一起使用?

4

1 回答 1

4

我会使用 aNSValue来装箱一个结构,因为它内置了对它的支持。不幸的是,你不能使用objective-c 的酷文字,但是:

struct foo myStruct;
NSValue *val = [NSValue valueWithBytes:&myStruct objCType:@encode(typeof(myStruct))];

// to pull it out...
struct foo myStruct;
[val getValue:&myStruct];

虽然这在其他 objc 代码中可能很笨拙且丑陋,但您必须问自己 - 为什么struct首先在 Objective-C 中使用 a ?使用带有几个@property(s)的对象几乎没有速度性能,我能看到的唯一真正原因是您是否正在与 C 库集成以与内存布局兼容,即便如此,objective-c 的结构对象的内存布局是明确定义的,只要超类不改变。

那么,您对 struct 进行装箱的真正目的是什么?如果我们有,我们可以为您提供进一步的帮助。

于 2012-10-29T16:30:30.563 回答