UITableViewDataSourcePrefetchingは必須で使うべきか?UITableViewDataSourcePrefetchingのリスクUITableViewDataSourcePrefetchingで事前処理して最適スクローリングする方法についてまとめました。UITableView(テーブル)には表示するUITableViewCell(セル)には様々な情報が乗せることが可能です。テーブルの特性からしても大量のデータを表示することに適しておりユーザーもまたそれを望んでいます。セル表示処理に負荷がかかるとスクロールにカクツキやFPS低下がおき、快適なスクロールにストレスが生じます。重いセルとは実務で最もポピュラーな重いセルとは、セル内の情報がネットワーク先にあるセルです。画像URLに対して画像としてデータをダウンロードします。画像ダウンロード後、それぞれのデータが揃うことでセルにデータが表示されます。これでサーバーサイドへの通信負荷により遅延が起きるなどすると、セルはあっと言う間に重いセルとなります。重いセルを再現するでは重いセルを再現するために擬似環境を実装します。次のコードは記事の画像やvia.placehoder.comのネットワーク画像を取得後200ms待機後にダウンロード完了させています。ImageLoaderは簡単な非同期画像取得と簡易キャッシュシステムです。記事向けに適当に作った物なので決して流用しないでください。}}UITableViewDataSourcePrefetchingを実装するUITableViewDataSourcePrefetchingを実装し、UITableView.prefetchDataSourceにインスタンスを渡す。}}挙動を確認する次のような動作をしたときログは下記のような出力をする。36]]スクロール最上部にいると、同時表示可能セル数分を次ページに対して要求するそれ以降は1セル移動すると1セル要求する、要求先は常に2ページ目先頭スクロール最下部にいると、同時表示可能セル数分を前ページに対して要求するこのことからプリフェッチは常に1ページ分を事前に取得しようと動いている。事前処理を行ってみる次のコードのように事前に画像のダウンロードを行うようにした。UITableViewDataSourcePrefetchingは必須で使うべきか?通信帯域と通信先の負荷に余裕があるなら使うと効果がある通信帯域やサーバーサイドに余裕があるのであればプリフェッチして利用帯域の拡大して事前に処理を終わらせることに効果はある。反対に通信帯域に余裕がない場合やサーバーサイドのレスポンスが遅い場合、表示中セルの画像ダウンロードを圧迫することになるため逆効果となる。UITableViewDataSourcePrefetchingのリスク下スクロールを突然上スクロールにすると、ロード不要なセルの事前情報に対して処理を行うので、無駄な処理をしてしまいます。無駄な処理だと分かったタイミングで処理を中断(キャンセル)が必要になります。キャンセル時に呼ばれるのでこのメソッドでキャンセル処理を行わないと、無駄な処理が完遂まで走り続けます。mothuleこのページはmothuleの技術ブログになります。当サイトに記載された情報により損害が発生しましても、責任は致しかねません。