Objective-C中的Box自定义结构

Pat*_*ini 5 struct objective-c objective-c-literals

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

我有一个自定义结构:

typedef struct {
    float f1;
    float f2;
} MYCustomStruct;
Run Code Online (Sandbox Code Playgroud)

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

@[@(instanceOfMYCustomStruct)];
Run Code Online (Sandbox Code Playgroud)

但是,我遇到了以下错误:

非法类型'MYCustomStruct'用于盒装表达式

有没有办法使用带有自定义结构的盒装表达式?

Ric*_*III 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];
Run Code Online (Sandbox Code Playgroud)

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

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