1

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

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

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

我可以存储一个指针NSTableColumn *并比较指针值吗?比较这些会快得多。或者指针是否可能在应用程序的持续时间内发生变化?

4

1 回答 1

1

an 的稳定性与 aNSTableColumn *的稳定性相同NSTextField *

最有可能的是,NSOutlineViewDataSource为您服务的对象NSOutlineView的生命周期与NSTableColumn.

一个典型的模式是让一个NSWindowController子类实例作为大纲视图的数据源,其中大纲视图位于一个 xib 中,该 xib 将窗口控制器作为文件的所有者。表列将在窗口控制器初始化后不久创建(并且在 -- 拦截它的点之后-loadWindowNSWindowController在子类中覆盖-loadWindowNSWindowController首先调用[super loadWindow],然后使用设置的不再nil指针Interface Builder) 并且会在窗口控制器被释放后很快被销毁。从-loadWindow被调用的时间到-dealloc在窗口控制器上被调用的时间,相同的NSTableColumns将被使用(当然,前提是您自己的代码中没有任何东西与它们混淆)。

唯一的潜在危险是大纲视图将在数据源被释放后调用它的数据源。为避免这种困难,在释放窗口控制器时将大纲视图的数据源设置为 nil。

于 2012-08-27T23:57:26.823 回答