1

私はを実装していますNSOutlineViewDataSource(ただし、または他のものでもかまいNSTableViewDataSourceません)。メソッドはoutlineView: objectValueForTableColumn: byItem:かなり頻繁に呼び出されており (明らかに行ごとに 1 回)、どの列が要求されているかを知りたいです。私がすることができます:

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

しかし、列ごとに行ごとに1回、非常に高価に感じます。

それぞれへのポインターを保存してNSTableColumn *、ポインター値を比較できますか? それらを比較すると、はるかに高速になります。それとも、アプリの使用中にポインターが変化する可能性はありますか?

4

1 に答える 1

1

の安定性は、 の安定性NSTableColumn *とまったく同じNSTextField *です。

ほとんどの場合、 の として機能しているオブジェクトのライフサイクルは、 のライフサイクルと非常に似ていNSOutlineViewDataSourceます。 NSOutlineViewNSTableColumn

典型的なパターンは、NSWindowControllerサブクラス インスタンスをアウトライン ビューのデータ ソースとして機能させることです。アウトライン ビューは、ファイルの所有者としてウィンドウ コントローラーを持つ xib 内にあります。テーブルの列は、ウィンドウ コントローラーが初期化された直後に作成されます (そして、これをインターセプトするため-loadWindowに呼び出されたポイントの後、サブクラスでオーバーライドして最初に呼び出し、次に設定された no-longer-pointers を使用します) Interface Builder) であり、ウィンドウ コントローラーの割り当てが解除されるとすぐに破棄されます。が呼び出されてからウィンドウ コントローラーで呼び出されるまで、同じものが使用されます (もちろん、独自のコードで何もいじらないことが条件です)。NSWindowController-loadWindowNSWindowController[super loadWindow]nil-loadWindow-deallocNSTableColumns

唯一の潜在的な危険は、データ ソースの割り当てが解除された後、アウトライン ビューがそのデータ ソースを呼び出すことです。この問題を回避するには、ウィンドウ コントローラーの割り当てを解除するときに、アウトライン ビューのデータ ソースを nil に設定します。

于 2012-08-27T23:57:26.823 に答える