我正在实施NSOutlineViewDataSource
(但也可能是NSTableViewDataSource
或其他任何内容)。 outlineView: objectValueForTableColumn: byItem:
方法被调用了很多(显然每行一次),我想知道正在请求哪个列。我可以这样做:
if ([[tableColumn identifier] isEqualToString:@"myCol"])
但感觉非常昂贵,每列每行一次。
我可以存储指向每个NSTableColumn *
的指针并比较指针值吗?比较那些会更快。或者指针可能会在应用程序的持续时间内发生变化?
答案 0 :(得分:1)
NSTableColumn *
的稳定性与NSTextField *
的稳定性相同。
最有可能的是,作为NSOutlineViewDataSource
的{{1}}的对象的生命周期与NSOutlineView
的生命周期非常相似。
典型的模式是将NSTableColumn
子类实例用作大纲视图的数据源,其中大纲视图位于xib中,其中窗口控制器作为文件的所有者。初始化窗口控制器后很快就会创建表列(在NSWindowController
上调用-loadWindow
之后 - 为了拦截它,覆盖{{1}中的NSWindowController
子类首先调用-loadWindow
,然后使用在Interface Builder中设置的不再 - NSWindowController
指针,并在释放窗口控制器后立即销毁。从调用[super loadWindow]
到窗口控制器上调用nil
的时间,将使用相同的-loadWindow
(前提是您自己的代码中没有任何内容和他们一起)。
唯一的潜在危险是大纲视图将在数据源解除分配后调用其数据源。要避免这种困难,请在取消分配窗口控制器时将大纲视图的数据源设置为nil。