2

iOS では、テーブルが現在のビューに必要なセルのみを表示し、それ以上は表示しないという意味で、NSTableView (UITableView) は遅延ロードされます。ユーザーが上下にスクロールすると、データ ソースからさらに多くの情報が読み込まれます。

OSXに似たものはありますか?ロードする 1000 以上のレコード (+ 複数の列) を持つ NSTableView があります。これにより、ロードが遅くなり、上下にスクロールするときにラグが発生します。

この「遅延」読み込みは良い解決策でしょうか (可能であれば)? それとも、同じ線に沿ったものですか?

ありがとう。

PS ロード プロセスについて - 私は 2 つの通常の方法を使用します

-(id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex

-(NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView

データをロードします。その中には、いくつかの変数をチェックするifステートメントがあります。データを含む2つのコンボボックスがあり、「ALL」と「ALL」を含むとこれらの1000以上のレコードがロードされるからです。コンボ ボックスが「ALL」でも「ALL」でもない場合、いくつかのレコードのみが読み込まれますが、問題なく読み込まれます。

遅延読み込みが自動的に行われると説明したことを考えると、問題は XML ファイルからデータを読み込んでいるため、おそらく解析が処理時間の大きな部分を占めていることだと思います。

実行時に XML ファイルから NSDictionary にデータをロードし、必要なときに使用できるようにメモリに保持することで、情報を実際に表示する必要があるときのロード時間を回避できます。

どう思いますか?ありがとう!

4

1 に答える 1

2

XML ファイルをなんらかのデータ構造にキャッシュする必要があることは間違いありません。このtableView:objectValueForTableColumn:row:メソッドは、可視セルごとに 1 回呼び出されます。多数の列がある場合、200 個のセルを表示するのは簡単です。ページダウンすると、これらのセルがすべて変更され、XML ファイルが 200 回読み込まれ、スクロールが遅くなります。

XML ファイルが特定の列のすべてのセルに対してのみ読み込まれて解析される場合でも、速度が低下するため、修正する必要があります。

キャッシングが必要であることを確認するには、そうでなければ XML ファイルを解析する場所にtableView:objectValueForTableColumn:row:戻ります。nilこの変更を行った後、スムーズにスクロールしますか、それとも他の問題はありますか? 明らかにアプリケーションが使用できなくなりますが、最適化を実装する前に、最適化が必要かつ十分かどうかを常に確認する必要があります。

于 2012-04-24T12:19:13.197 に答える