指针值在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