3

これは、実際の質問ではなく、一般的な議論である可能性があります。私が NSTableView と NSOutlineView を使い始めたとき、私は考えました:ああ、NSView のインスタンスはほとんどすべてを行うことができます。したがって、delegate と dataSource で NSView インスタンスを返します。

もちろんうまくいきませんでしたが、NSTableView は NSObject から直接継承する NSCell のインスタンスで構成されていることに気付きました。

Cocoa がなぜ NSCell に基づいて NSTableView を構築したのに NSView を構築したのかを理解することが重要であると感じました。しかし、それを明確に説明している文書はほとんどありません。したがって、私は Stackoverflow に目を向けます。誰かそれを知っていますか?よろしくお願いします!

4

2 に答える 2

6

インスペクターでビューベースの NSTableView または NSOutlineView に切り替えることができます

セルからビューベースへの変更

セルベースのセルの理由は、文字列のみを表示したい場合です。文字列のみを表示したい場合、各セルのビュー全体を初期化するのはリソースの無駄です。基本的には、メモリ制御と表示する必要があるものについてです。

于 2013-06-08T12:10:11.433 に答える
4

@ d00dle の回答は、NSView を使用したテーブル ビューの使用方法を示していますが、なぜ NSTableViews が歴史的に NSCells を最初に使用していたのかという質問には答えていません。

その答えは、NSView は重いオブジェクトであり、管理にコストがかかるということです。NSTableViews は通常、"ビューのような" 要素の多くの行と列を必要とし、単純にそれらすべてを実際の NSViews として追加すると、レスポンシブ UI を維持できなくなります。

これは、Apple が NSView に基づくテーブルとアウトライン ビューをサポートするために追加したトリッキーさに反映されています。限られた数の NSView を作成し、巧妙な方法でそれらをリサイクルして、任意の時点で使用中の NSView の総数を減らします。

于 2015-03-05T16:58:03.017 に答える