我的问题是关于 Apple Objective-C header 中的样式/结构。以NSSplitViewItem
为例:
NSSplitViewItem(苹果):
@interface NSSplitViewItem : NSObject { @private id _splitViewItemPrivateData; struct { unsigned int _collapsed:1; unsigned int _canCollapseFromDrag:1; unsigned int _canCollapseFromDoubleClickOnDivider:1; unsigned int _reserved:29; } _flags; }
为什么是结构体?
为什么 Apple 似乎倾向于使用 int
标志结构作为选项?这种模式在整个标题中非常常见,甚至在看似不必要的地方(例如这里)。为什么不直接将这些整数作为 iVar 放在类中,而不是将它们包装到结构中?
是否有一些性能提升或其他好处?这里的“旗帜”都与“折叠”有关。但在其他类中,例如 NSTableView,有一些“flags”结构,其中有超过两打不相关的条目。
那么这只是苹果的风格,还是有更有意义的东西?
最佳答案
他们正在使用位字段。在这种情况下,这意味着三个值仅存储在 32 位中。另外,为了将来的扩展,他们可以在相同的 32 位中添加 29 个 bool 变量,而无需更改结构的布局。如果数据是持久的,那么添加这 29 个进一步的变量甚至不需要更改版本号。
如果您有两打不相关的值,那么这两打值仅存储在 32 位 = 4 字节中。这一切都有助于内存使用。
关于objective-c - 为什么 Apple 在其类中使用 "flags"结构体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30614611/