NSValue 、结构体与 objc_boxable

Sep 15, 2022 • 预计阅读时间 1 分钟

clang 的扩展属性 objc_boxable 支持把结构体声明为可打包,这样结构体就可以使用打包语法转换为 NSValue 类型。

本质上是语法糖。

举个例子:

typedef struct __attribute__((objc_boxable)) CBox {
    double x, y, z;
} CBox;

NSValue *box = @(CBox{ 12.34, 23.45, 34.56 });

CBox value;
[box getValue:&value];

需要注意的是,结构体中的成员不能是 ObjC 的类型,否则会报 Non-trivially copyable type 'CBox' cannot be used in a boxed expression 编译错误。

参考资料

https://clang.llvm.org/docs/ObjectiveCLiterals.html#boxed-c-structures

Objective-C
版权声明:如果转发请带上本文链接和注明来源。

lvv.me

iOS/macOS Developer

ObjC++ 中的 lambda 和 block

curl 断点续传