我的问题是关于Apple的Objective-C标题中的样式/结构。以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
标志结构作为选项?这种模式在它们的标题中非常常见,即使在看似不必要的地方 - 例如这里。为什么不把这些ints
作为iVars放在类上而不是将它们包装成结构?
是否有一些性能提升或其他好处?在这里,"标志"都与#34; collapasing"有关。但在其他课程中,例如NSTableView
,有#34;标志"结构有超过二十几个不相关的条目。
这只是一种Apple风格,还是有更有意义的东西?
答案 0 :(得分:4)
他们正在使用位字段。在这种情况下,它意味着三个值仅存储在32位中。另外,对于将来的扩展,他们可以在相同的32位中添加29个更多的布尔变量,而无需更改结构的布局。如果数据保持不变,那么添加这29个其他变量甚至不需要更改版本号。
如果你有二十几个不相关的值,那就是存储在32位= 4字节中的二十几个值。这一切都有助于内存使用。