2010-11-22 15 views
2

私はカスタムテーブルセルでいっぱいになっているテーブルビューを持っています。私が取り組んでいる問題は、スクロールしている間にスクロールし始め、多くのアイテムがテーブルを埋めるようになることです。 (ユーザーがスクロールするように動的スクロールを実装しているので、サーバーから次のxアイテムを取り出して、何も更新せずに内容をスクロールすることができます)UITableViewカスタムセル、スクロール、メモリ管理

今私は私はIBに建てられたカスタムテンプレートから細胞を作成し、それらを初期化し、このような何か:

CustomCellClass *cell = (CustomCellClass *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

if (cell == nil) { 
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellNib owner:self options:nil]; 
    cell = (CustomCellClass *)[nib objectAtIndex:0]; 
} 

をどのようにこのような場合のメモリ管理の仕事は私はメモリと減速の巨大な塊を撮って終了していないはずですスクロールダウン?どんな助力/示唆/洞察も大いに感謝されるでしょう。ありがとう!

EDIT:メモリリークがないようにチェックしました。

答えて

1

私は、データをフェッチするために使用されるデータコントローラクラスの1つで、根本的な深刻なメモリリークを発見しました。減速を引き起こしていたものです。大量のメモリが使用されているのを見ましたが、計測器はリークを検出していませんでした。ちょうど良い古い手動のデバッグを何も示していない。 :) 助けてくれてありがとう。

+0

は、まだテーブルのセルメモ管理をブラッシュアップするのは良いです。 :) – gabaum10

0

表のセルを管理するために表示したコードの一部が正常に表示されます。

説明からわかるように、ボトルネックはサーバー(Webサービス?)からの実際のデータ取得のようです。メインスレッドまたは別のスレッドでWebサービスコールを行っていますか?すでにそうしていない場合は、別のスレッドでWebサービスを呼び出し、Webサービスが完了した後に更新される「プレースホルダ」セルを作成することができます。これにより、各セルのデータが必ずしもすぐには表示されません(データが利用可能になるまで「読み込み中」などと表示されるなど)が、必ずしもUIを応答しておく必要があります。

+0

はい私は非同期的にUIをフリーズしないようにしています。それはうまくいきますが、多くの細胞が積まれているときには一種の遅れがあります。セルにドリルダウンして戻っても、良いパフォーマンスが戻ってくるので、奇妙なことです。だから私はなぜそれが起こっているのか迷っています... – gabaum10

+0

CustomCellClassにいくつかのNSLog呼び出しを追加し、init/deallocsを見て、テーブルセルのメモリ管理が期待通りに機能していることを確認できます。セルがいっぱいの画面を取得したら、そのポイントからのセルを再利用する必要があります(つまり、スクロールするときにinit/deallocを使用しないでください)。これは、問題が表のセルであるのか他の場所であるのかを示します。 – cbranch

+0

男よ、私の答えをチェックしてください。 – gabaum10