Sam*_*Sam 5 cocoa objective-c nscell swift
我知道 Apple 不赞成使用 ,NSCell而赞成使用NSView(请参阅 AppKit 10.10 发行说明)。以前建议NSCell在需要许多控件时出于性能原因使用。
我花了相当多的时间来实现一个需要很多子视图的自定义控件,而使用 NSView 类型的子视图的性能并不好。请参阅相关的 stackoverflow 讨论 ,在窗口中可以拥有的 NSView 类型实例数量方面有哪些实际限制?我正在努力处理 1000-2000 个内存中的对象(这看起来并不多)。这种限制的实际原因是什么?
上面让我感到困惑的一件事是基于视图的 Cocoa NSTableViews。您可以创建超过 1000-2000 个单元格的 tableViews,并且它们的加载和滚动性能似乎并不差?如果每个单元格都是一个 NSView,那么这是如何实现的?
如果有实际限制,那么当 Apple 说他们不赞成使用 NSCell 时,他们在想什么?我相信他们知道某些控件需要大量的子视图。
此外,(可能已经过时的)Apple Developer Guide 对 NSView 和 NSCell 之间的区别给出了以下解释,我需要进一步解释:
“因为单元格比控件更轻,在继承的数据和行为方面,使用多单元格控件比使用多个控件更有效。”
继承的数据:如果数据被使用 => 这肯定只会导致“膨胀”,并且只会在你需要的时候使用它?
继承行为:您不在类/对象中使用的方法肯定不会造成任何开销?
轻量级 NSCell 与重量级 NSView 之间的真正区别是什么,除了它似乎被传统接受之外? (我真的很想知道。)
一个简短且不完整的答案:
NSCells 是关于绘制状态的,除此之外就没有什么了。NSView 必须绘制,但也必须维护和更新各种其他信息,例如它们的布局、响应用户输入事件等。
考虑一下如果调整包含数百个子视图的视图的大小,则必须进行的计算量:必须根据视图布局的现有约束来维护每个子视图的位置和大小。仅此一项就需要大量的处理。
相比之下,NSCell 并不以这种方式存在于布局中。他们唯一的工作是在需要时在给定的矩形中绘制信息。
| 归档时间: |
|
| 查看次数: |
931 次 |
| 最近记录: |