MacOS 上的 NSCell(比较 NSButton 和 NSButtonCell )

来源:互联网 发布:淘宝新开店铺图标 编辑:程序博客网 时间:2024/05/31 20:51

  • NSButton 和 NSButtonCell 的继承关系
  • Cell和Control 的关系

本文选摘自 关于NSCell : http://cocoa.venj.me/blog/about-nscell/


NSButton 和 NSButtonCell 的继承关系

  • NSButton的继承关系是:NSButton -> NSControl -> NSView -> NSResponder -> NSObject。应该说,是一个很长的继承链了。
  • NSButtonCell的继承关系是:NSButtonCell -> NSCell -> NSObject。

比之NSButton,少了两层继承关系。光凭这一点大致就能够解释为什么Cell的性能比Control高很多了。


Cell和Control 的关系

NSCell是控件的UI显示部分。
NSButton 和 NSMatrix 能够为 NSButtonCell 提供一个控制视图,用来实现Cell的显示。
不过 NSMatrix 需要直接操作 NSButtonCell 对象,而 NSButton 则不需要。因为它已经“封装”了所有 NSButtonCell 的同名方法。也就是说,对NSButton调用方法(不是所有的方法),实际上是对NSButtonCell调用方法,调用的时候,我们甚至可以无需知道NSButtonCell的存在。

所以在Interface Builder中,NSButton总是和NSButtonCell同时存在,在Interface Builder里,NSButton和NSButtonCell的Inspector里的属性也基本相同。