1

バックグラウンド

  • GCを使用したSnowLeopard10.6.4のCoreDataアプリ

  • バインディングを使用してNSTreeControllerに裏打ちされたNSOutlineViewがあります

  • 私はバックグラウンドのNSOperationサブクラスに数十のオブジェクトを作成し、保存mergeChangesFromContextDidSaveNotificationしてメインコンテキストにマージするために使用しています。これらはすべて、Appleドキュメントで推奨されています。

  • メインコンテキストには何千ものオブジェクトがあります

問題

パフォーマンスの問題がたくさんありました。マージに数秒かかることがあり、UIがロックされます。また、かなり多くのメモリを使用しているようです。

私は最近、他の人もこの問題を抱えていることを発見しました。これは、バインディングとのNSTreeController/NSOutlineViewの組み合わせの制限であると私は考え始めています。

質問

  1. NSOutlineViewとNSTreeControllerは何千ものオブジェクトを効率的に処理できますか?

  2. この投稿は、これがrdar://7139579を引用する10.6.2の問題であることを示唆しているように見えました。これが「修正」されたかどうか誰かが知っていますか?

何か提案をいただければ幸いです。

4

1 に答える 1

0

結論は?通常の方法でアプリを最適化する必要があると思います。また、多くのKVO通知が発生したため、表示するデータを少なくするのがよいでしょう。アプリの速度を上げたら、ここでさらに報告する場合があります。

更新:2011年9月

この質問が投稿されて以来、私は多くのことを学びました。私の大きな教訓の1つは、時々、あなたが望むものを手放し、それがデザインのトレードオフになることを受け入れなければならないということです。

現在、アプリの外観を再設計して高速化しています。私が学んだNSTreeControllerは、多くても数百のエントリを処理するように設計されています。何千ものエントリは、ユーザーがとにかく混乱することを意味します。UIをよりシンプルになるように再設計しました。そして今、私は代わりにテーブルビューを使用しています。これははるかに高速です。

于 2010-11-18T13:19:20.770 に答える