可能重复:
How to wrap a Struct into NSObject
Can the new Clang Objective-C literals be redirected to custom classes?
我有一个自定义结构:
typedef struct {
float f1;
float f2;
} MYCustomStruct;
我需要添加到NSArray
。我已经写了一个类别来创建这些结构的NSValues
,然后我将其添加到NSArray
,但是如果可能的话,我想进一步使用盒装表达式来简化它。我很乐意能够做到这一点:
@[@(instanceOfMYCustomStruct)];
但是,我遇到了以下错误:
盒装表达中使用的非法类型'MYCustomStruct'
有没有办法使用带有自定义结构的盒装表达式?
答案 0 :(得分:4)
我会使用NSValue
来装箱结构,因为它内置了对它的支持。不幸的是,你不能使用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代码中丑陋,你必须问自己 - 为什么你在Objective-C中首先使用struct
?使用具有少量@property
(s)的对象获得的速度性能很少,我能看到的唯一真正原因是,如果要与C库集成以与内存布局兼容,即使这样,结构也是如此一个Objective-c对象的内存布局是明确定义的,只要超类没有改变。
那么你在拳击结构中的真正目的是什么?如果我们有这个,我们可以帮助您。