objective-c - NSCell 与 NSView : when many controls are needed

标签 objective-c cocoa swift nscell

我知道 Apple 正在弃用 NSCell 以支持 NSView(请参阅 AppKit 10.10 发行说明)。以前建议在需要许多控件时出于性能原因使用 NSCell

我花了相当多的时间来实现一个需要很多 subview 的自定义控件,而使用 NSView 类型的 subview 的性能并不好。参见 related stackoverflow discussion 在一个窗口中可以拥有的 NSView 类型实例的数量方面的实际限制是什么?我一直在努力处理 1000-2000 个内存中对象(这看起来并不多)。 此限制的实际原因是什么?

让我在上面感到困惑的一件事是基于 View 的 Cocoa NSTableViews。您可以创建具有超过 1000-2000 个单元格的 tableView,并且它们似乎没有较差的加载和滚动性能? 如果每个单元格都是一个 NSView 那么这是如何实现的?

如果有实际限制,那么Apple 在说他们不赞成使用 NSCell 时在想什么?我相信他们知道某些控件需要大量 subview 。

此外,一份(可能已过时的)Apple Developer Guide 对 NSView 和 NSCell 之间的区别给出了以下解释,我需要进一步解释:

“因为单元格比控件轻量级,所以在继承的数据和行为方面,使用多单元格控件比使用多个控件更有效。”

继承数据:如果数据被使用,这肯定只会导致“膨胀”=> 并且它只会在您需要它时使用?

继承行为:您不在类/对象中使用的方法肯定不会造成任何开销?

轻量级 NSCell 与重量级 NSView 之间的真正区别是什么,除了它似乎只是被常规接受? (我真的很想知道。)

最佳答案

One thing that confuses me on the above is View-based Cocoa NSTableViews. You can create tableViews with more than 1000-2000 cells and they don't seem to have poor loading and scrolling performance? If each of the cells is an NSView then how is this achieved?

NSTableViews 重用 View 。实际生成的唯一 View 是那些可见的 View ,加上可能在可见区域上方的一行 View 和在可见区域下方的一行 View 。滚动表格时,与给定行 View 关联的对象值更改为该行中的 View 将显示不同的内容

关于objective-c - NSCell 与 NSView : when many controls are needed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27190183/

相关文章:

iphone - 写信给 Pastie 或 Pastebin?

ios - 打开设置 iOS 8 URL

swift - 如何获得对主视图 Controller 的引用?

ios - UITableView 部分页脚文本与 Swift

c++ - Xcode 中下一次出现的区分大小写选择

ios - 无效更新 : invalid number of items on UICollectionView

ios - 可重复使用的 MBProgressHUD

objective-c - 在 NSXMLNode 中追加字符串

c - 一起使用 C 文件和 Cocoa 类时出现问题

Swift/JS 还原 WebView 后退转发列表