为什么Apple使用"标志"在他们的课堂上结构?

时间:2015-06-03 08:23:11

标签: objective-c c macos cocoa struct

我的问题是关于Apple的Objective-C标题中的样式/结构。以NSSplitViewItem为例:

NSSplitViewItem(Apple):

@interface NSSplitViewItem : NSObject  {
@private
    id _splitViewItemPrivateData;
    struct {
        unsigned int _collapsed:1;
        unsigned int _canCollapseFromDrag:1;
        unsigned int _canCollapseFromDoubleClickOnDivider:1;
        unsigned int _reserved:29;
    } _flags;
}


为什么选择Struct?

为什么Apple似乎倾向于使用int标志结构作为选项?这种模式在它们的标题中非常常见,即使在看似不必要的地方 - 例如这里。为什么不把这些ints作为iVars放在类上而不是将它们包装成结构?

是否有一些性能提升或其他好处?在这里,"标志"都与#34; collapasing"有关。但在其他课程中,例如NSTableView,有#34;标志"结构有超过二十几个不相关的条目。

这只是一种Apple风格,还是有更有意义的东西?

1 个答案:

答案 0 :(得分:4)

他们正在使用位字段。在这种情况下,它意味着三个值仅存储在32位中。另外,对于将来的扩展,他们可以在相同的32位中添加29个更多的布尔变量,而无需更改结构的布局。如果数据保持不变,那么添加这29个其他变量甚至不需要更改版本号。

如果你有二十几个不相关的值,那就是存储在32位= 4字节中的二十几个值。这一切都有助于内存使用。