アプリのスクロールのパフォーマンスを改善しようとしています。私は一般的に受け入れられているすべてのアドバイス(CGで自分で描く、セルが不透明、サブビューがないなど)に従いましたが、バックグラウンドのCPUとネットワークアクティビティがあると、まだ途切れることがあります。
ここに述べられている1つの解決策:
http://www.fieryrobot.com/blog/2008/10/08/more-glassy-scrolling-with-uitableview/
試したセルのビットマップスナップショットをキャッシュすることです。しかし、ビットマップはあいまいで、大量のメモリを消費していました(それぞれ数百kb)。
そのリンクのコメントの1つの提案は、セルがグラフィックカードのメモリに移動するため、CGLayerまたはCALayer(?)を使用してセルをキャッシュすることです。それで、いくつかの質問、
1)これを試したことはありますか?サンプルコード?
2)iphone / ipod touchグラフィックカードにはどのくらいのメモリがありますか?これは意味がありますか?
3)物事をスピードアップするための他の提案はありますか?
詳しくは
私は(電話で)CPUサンプラーを使用し、問題を解明するためにセルから物事を体系的に排除しました。いくつかのこと:
1)セルの設定ではありません。描画呼び出し(drawinrectなど)だけを削除し、セットアップをそのままにしておくと、ガラスのようになります。
2)最小の画像(25x25 png)の描画ではありませんが、それを入れても問題ありません。
3)2番目または3番目の画像(最初は大きな背景320x1004kB、もう1つはボタン画像61x35 4kB)を追加すると、途切れます。クラスメソッドで両方のUIImageを取得しているので、キャッシュされます。
4)テキストも問題です。drawRectは、その時間の75%を私が使用している3つのNSStringdrawInRectメソッドに費やしているようです。好き:
[mytext drawInRect:drawrect withFont:myFont lineBreakMode:UILineBreakModeTailTruncation];
それらの呼び出しはWebコアを経由しているようですが、おそらくそれがいくつかのスタッターを引き起こしますか?2行のテキストと1つの小さな段落のテキストをフォーマットできる必要があります。テキストを省略記号で切り捨てる機能が必要です。これらをクリティカルパスから実行してキャッシュできますか?その部分をレイヤーでできますか?