指针值在Cocoa视图回调中是否稳定?

指针值在Cocoa视图回调中是否稳定?,cocoa,Cocoa,我正在实现一个NSOutlineViewDataSource(但它也可以是NSTableViewDataSource或其他任何东西)。outlineView:objectValueForTableColumn:byItem:方法被调用了很多次(显然是每行调用一次),我想知道请求的是哪一列。我可以这样做: if ([[tableColumn identifier] isEqualToString:@"myCol"]) 但它感觉非常昂贵,每行每列一次 我是否可以存储指向每个NSTableColum

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

if ([[tableColumn identifier] isEqualToString:@"myCol"])
但它感觉非常昂贵,每行每列一次


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

一个
NSTableColumn*
的稳定性与一个
NSTextField*
的稳定性相同

作为
NSOutlineView
NSOutlineView数据源的对象的生命周期很可能与
NSTableColumn
的生命周期非常相似

一种典型的模式是使用
NSWindowController
子类实例作为大纲视图的数据源,其中大纲视图位于xib中,xib将窗口控制器作为文件的所有者。在初始化窗口控制器后(以及在
NSWindowController
上调用
-loadWindow
后,表列将很快创建——要截获此操作,请重写
NSWindowController
子类中的
-loadWindow
,以首先调用
[super loadWindow]
然后使用在Interface Builder中设置的不再-
nil
指针),并将在释放窗口控制器后立即销毁。从调用
-loadWindow
到在窗口控制器上调用
-dealloc
时,相同的
NSTableColumns
将被使用(当然,前提是您自己的代码中没有任何内容会干扰它们)


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

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

作为
NSOutlineView
NSOutlineView数据源的对象的生命周期很可能与
NSTableColumn
的生命周期非常相似

一种典型的模式是使用
NSWindowController
子类实例作为大纲视图的数据源,其中大纲视图位于xib中,xib将窗口控制器作为文件的所有者。在初始化窗口控制器后(以及在
NSWindowController
上调用
-loadWindow
后,表列将很快创建——要截获此操作,请重写
NSWindowController
子类中的
-loadWindow
,以首先调用
[super loadWindow]
然后使用在Interface Builder中设置的不再-
nil
指针),并将在释放窗口控制器后立即销毁。从调用
-loadWindow
到在窗口控制器上调用
-dealloc
时,相同的
NSTableColumns
将被使用(当然,前提是您自己的代码中没有任何内容会干扰它们)

唯一的潜在危险是outline视图将在数据源解除分配后调用其数据源。若要避免此困难,请在释放窗口控制器时将outline视图的数据源设置为nil