• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:UITableViewの処理速度について)

UITableViewの処理速度について

このQ&Aのポイント
  • UITableViewの処理速度について質問です。
  • SLRequestを使いSNSからデータを取得し、UITableViewで表示しています。非同期で通信しているので、numberOfSectionsInTableViewやnumberOfRowsInSectionは数ミリ秒で処理されますが、cellForRowAtIndexPathに入るまでに数十秒かかってしまいます。
  • 具体的には、データを取得し配列にセットしてからテーブルビューをリロードする処理までが遅く、その原因がわかりません。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

このログからすると、numberOfRowsInSectionの中の処理で 時間がかかっているんじゃないかなと思いました。 numberOfRowsInSectionの最後にログを入れると、 そのあたりがはっきりすると思います。 SNS系のAPIはあまり使用したことないので、かなりあてずっぽうですが、 numberOfRowsInSectionで全体のテーブルサイズを得るために、 同期的に全データを読み込むようなAPIを呼び出したりしてないでしょうか? numberOfRowsInSectionで返すテーブルサイズは、今読まれている データのサイズを返すようにし、非同期に読み込みが完了する たびにnumberOfRowsInSectionが返す値を増やすような設計に していればうまくいくんじゃないかなと思いました。 以上、詳しい処理方式が説明されてないので、勝手な想像での アドバイスです。 あと、どのスレッドが時間を使っているかわからないとのこと ですが、今回のようなケースだと、数十秒の時間がかかっている 時に、デバッグエリアの実行中断/再開ボタンで実行を一時中断させ、 その時のコールスタックの状態を調べれば、何が動いているか わかると思います。 (参考) Debug AreaのExecution control button https://developer.apple.com/library/mac/recipes/xcode_help-debugger/articles/about_debug_area.html Debug Navigatorのcall stacks https://developer.apple.com/library/mac/recipes/xcode_help-debug_navigator/articles/about_debug_navigator.html

RYO-88
質問者

お礼

いつもご解答、本当にありがとうございます。 numberOfRowsInSection では、配列の数を、そのまま返していたので処理に時間はかかっておりませんでした。 >非同期に読み込みが完了する >たびにnumberOfRowsInSectionが返す値を増やすような設計に >していればうまくいくんじゃないかなと思いました。 今回は、取得する件数が少ないため一度に、返していましたが 今後、件数の多いテーブルビューを使う時は、このような設計で行きたいと思います。 教えて頂きました方法で、コールスタックの状態を調べたところ performRequestWithHandler での処理が終わっていないことが解りました。 根本的な解決にはなっていませんが、テーブルビューのリロード処理の スレッドを分けたところ問題なく動くようになりました。 開発自体は仕事で行っているのですが、スマホアプリは独学の趣味でして、こういうアドバイスは本当にありがたいです。 本当に、ありがとうございました。

関連するQ&A