3

这可能是一个一般性的讨论,而不是一个真正的问题。当我开始使用 NSTableView 和 NSOutlineView 时,我想:哦,NSView 的一个实例几乎可以做所有事情。所以我在我的委托和数据源中返回一个 NSView 实例。

当然,它不起作用,我意识到 NSTableView 包含直接从 NSObject 继承的 NSCell 实例。

我觉得理解 Cocoa 为什么基于 NSCell 而不是 NSView 构建 NSTableView 可能很重要。但很少有文件能解释清楚。因此我转向 Stackoverflow。有人知道吗?提前谢谢你!

4

2 回答 2

6

您可以在检查器中切换到基于视图的 NSTableView 或 NSOutlineView

从单元格更改为基于视图

基于单元格的单元格的原因是您只想显示一个字符串。如果您只想显示一个字符串,那么为每个单元格初始化一个完整的视图会浪费资源。它基本上是关于内存控制与您需要显示的内容。

于 2013-06-08T12:10:11.433 回答
4

@d00dle 的回答显示了如何使用 NSView 支持的表视图,但它没有回答为什么 NSTableViews 历史上首先使用 NSCells 的问题。

答案是 NSViews 是沉重的对象并且管理起来很昂贵。NSTableViews 通常需要很多行和列的“类似视图”的东西,如果你天真地将它们全部添加为实际的 NSViews,你就无法维护响应式 UI。

这反映在 Apple 添加的支持 NSView 支持的表格和大纲视图的技巧上。它创建有限数量的 NSView 并以巧妙的方式回收它们,以减少在任何给定时刻使用的 NSView 总数。

于 2015-03-05T16:58:03.017 回答