Cocoa View回调中的指针值是否稳定?

时间:2012-08-27 12:33:01

标签: cocoa

我正在实施NSOutlineViewDataSource(但也可能是NSTableViewDataSource或其他任何内容)。 outlineView: objectValueForTableColumn: byItem:方法被调用了很多(显然每行一次),我想知道正在请求哪个列。我可以这样做:

if ([[tableColumn identifier] isEqualToString:@"myCol"])

但感觉非常昂贵,每列每行一次。

我可以存储指向每个NSTableColumn *的指针并比较指针值吗?比较那些会更快。或者指针可能会在应用程序的持续时间内发生变化?

1 个答案:

答案 0 :(得分:1)

NSTableColumn *的稳定性与NSTextField *的稳定性相同。

最有可能的是,作为NSOutlineViewDataSource的{​​{1}}的对象的生命周期与NSOutlineView的生命周期非常相似。

典型的模式是将NSTableColumn子类实例用作大纲视图的数据源,其中大纲视图位于xib中,其中窗口控制器作为文件的所有者。初始化窗口控制器后很快就会创建表列(在NSWindowController上调用-loadWindow之后 - 为了拦截它,覆盖{{1}中的NSWindowController子类首先调用-loadWindow,然后使用在Interface Builder中设置的不再 - NSWindowController指针,并在释放窗口控制器后立即销毁。从调用[super loadWindow]到窗口控制器上调用nil的时间,将使用相同的-loadWindow(前提是您自己的代码中没有任何内容和他们一起)。

唯一的潜在危险是大纲视图将在数据源解除分配后调用其数据源。要避免这种困难,请在取消分配窗口控制器时将大纲视图的数据源设置为nil。