2009-08-29 3 views
2

まず、いくつかの基本について理解していますが、まだまだ初心者です。データでUITableViewを実装する

私は現在、NSDictionary(グループ化用)と4または5種類のNSArrays(データ用に、セルが選択されたときに次のビューに渡される)を使用しているセクション化UITableViewを持っています。それは動作しますが、それは非常に長いリストで、UITableViewを上下にスクロールしてそのビューを終了して戻ってくると、アプリケーションは「スローダウン」して最終的にフリーズします。私はいくつかの研究をしており、私がやっているやり方が最良の方法ではないことを発見しました。私は別のオブジェクトを使用して、必要に応じてデータを読み込み、そのデータをメモリに保持しない(おそらく私のアプリケーションがフリーズする原因になる)テーブルを生成することについて読んだ。

私のデータを格納し、それを私のUITableVIewで使用するための "データオブジェクト"を構築するのに正しい方向を教えてもらえますか?私はNSDictionariesとNSArraysを取って、何とか彼ら自身のクラスに入れて、そのクラスを呼び出すことができますか?コアデータを使用しますか?その他の提案はありますか?メモとして、このデータは、ユーザーに追加、更新、または削除することはできません。私がデータを変更する唯一の時間は、リストを長くしたり、しばらくしたりするために、より多くのデータ(完全に新しいレコード)を追加することですが、まれに私によって更新または削除されます。

ご協力いただければ幸いです。

+0

私が推測するのは、辞書や配列ではないということです。 View Controllerから 'cellForRowAtIndexPath:'メソッドを投稿できますか?テーブルセルを適切に再利用していない可能性があります。 – Aaron

答えて

0

CoreDataと組み合わせると、UITableViewControllerが最も効率的です。これを行うには、NSFetchedResultsControllerを調べる必要があります。 CoreDataに簡単にアクセスするには、MagicalRecordを使用してください。それは非常に使いやすく、非常に効率的です。

しかし、何千ものNSStringでいっぱいになったNSArrayを持つNSDictionaryは、メモリの問題を引き起こすものではないことに注意してください。最初にこれをメモリにロードすることができるという事実は、メモリ内のデータ構造全体を保持できることを示唆しています。スクロールするとゆっくりとフリーズするという事実は、メモリの問題がUITableViewのセルのインスタンス化に由来することを意味します。

ここではいくつかの事はあなたが確認する必要があります:

  1. はあなたが楽器を使用する方法を知っていますか?その場合は、メモリリークをチェックしてください。
  2. あなたはUITableViewControllerにdidReceiveMemoryWarningを受け取っていますか?私はそう思っています。しかし、スレッドをブロックする問題ではないことを確認したいと思っています。
  3. UITableViewCellsで画像を使用していますか?何千枚もの画像がある場合は、NSCacheを使って画像を保存してください。これにより、必要に応じてメモリが自動的にクリアされます。
  4. カスタムUITableViewCellを使用していますか?スクロールの速度が低下しているので、カスタムセルが描画に問題がないことを確認してください。
  5. セルをデキューしていることを確認してください。これはテンプレートUITableViewControllerコードで行われますが、何らかの理由で削除した可能性があります。
関連する問題