CoreData+TableViewでスクロールが遅い時の対策

CoreData+TableViewのときFetchResultsControllerを使います。 しかし、CoreDataをつかっているから、FetchResultsControllerをつかっているから絶対にTableViewがかくかくしないなんてことはありません。 各オブジェクトのデータ量によってはスクロールがかくかくしてしまいます。 そのカクカクの対策方法です。

カクカクする原因

まず、なぜかくかくする時があるのかというと 単純にCoreDataからデータをもって来るときにデータ量が多いのが原因です。 ここでいうデータ量が多いってのはTableViewに表示するデータの数が多いという意味ではなく、 一つ一つのManagedObjectのデータ量が多いという意味です。
たとえば、音楽プレーヤーアプリでCoreDataを使っていたとすると、 かくかくする原因は曲の数ではなく、それぞれの曲の音データの容量が大きいことです。

対策法

曲自体の音データは非常に重たいですが、TableViewに表示するときはその音データまでロードする必要はありません。 曲のタイトル、アーティストがわかれば十分なはずです。 しかし、CoreDataでは同じEntityのデータを別々に分けてロードする、という手法が取れません。 なので、曲の音データとタイトル等の情報を分けて保存してあげます。 データ量が多くてロードするのに時間がかかるカラムのみ、べつのEntityにしてしまうのです。 こうすることで、TableViewを表示するときにはその表示に必要な最低限のデータのみをロードし、 そのあとで本当に必要になったときのみ重いデータをロードする、といったことができるようになります。

CoreDataを使っていても、きちんと使いこなせなければ十分な快適性は生まれないこともあるので、 きちんと注意していきたいですね。