objective-c - Objective-C 中的 Box 自定义结构

标签 objective-c struct objective-c-literals

<分区>

Possible Duplicate:
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)];

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

Illegal type 'MYCustomStruct' used in a boxed expression

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

最佳答案

我会使用 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 库集成以与内存布局兼容,甚至那么,只要父类(super class)不改变,Objective-C 对象的内存布局结构就是明确定义的。

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

关于objective-c - Objective-C 中的 Box 自定义结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13125646/

相关文章:

以列表长度作为参数的 C++ 结构

arrays - Go接口(interface) slice 和指针

c++ - 如何在 C++ 中引用结构组件

objective-c - 为什么使用 'literal syntax' 创建的实例被称为 'literals' ?

ios - 如果屏幕锁定,点击暂停按钮时 avplayer 不会暂停

objective-c - 将除双击以外的触摸转发到 UITextView

objective-c - NSMutableDictionary 的字面创建是否比类辅助方法效率低?

ios - objective-c JSON 文字,嵌套 - 最优雅的解决方案?

iphone - 将评论发布到特定新闻源 Facebook IOS Sdk

iphone - 在 NSMutableArray 中保存 UIImage 的最佳实践