2011-12-29 15 views
7

私はUITableViewを持っています。各行はビデオ、画像などで重いオブジェクトです ユーザーがこのビューをスクロールすると、表示されない行のメモリを解放し、現在の表示可能な行をロードできますか?UITableViewのセルが表示されないときに解放する

+1

再使用可能なセルを使用し、メモリ処理を忘れる(システムに残す) – samfisher

答えて

6

あなたは、行自体のイメージではなく、行のイメージとビデオで使用されているメモリを解放することについて話しているとします。あなたのテーブルビューのデリゲートで

、テーブルビューのスクロールが停止したとき

-(void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView 

がわかります。

[myTableView indexPathsForVisibleRows] 

は、表示される内容の配列を提供します。

行がこの配列にない場合は、表示されず、イメージ/ビデオのクリーンアップも行えます。

2

アップルの推奨に従ってUITableViewCellをリサイクルしていますか?そうでなければ、Appleのドキュメントを読んでください。 cellForRowAtIndexPathの内部:デリゲートに[customCell setMediaObjects:]というものがあるはずです。 customCellクラスの中で、以前のすべてのmediaObjectをメモリから解放することができます。

1

A Closer Look at Table-View Cells - Apple Documentation

呼び出す dequeueReusableCellWithIdentifier最初の10(ちょうど10個のセルを1つの瞬間に画面に表示することができます)細胞は、その後、彼らはちょうどロードされ、表示用に設定されます作成されます。 したがって、細胞は放出されません。

2

他の人は言ったように、セルを適切にリサイクルし、セルを再利用するときに再作成する必要があるものを破壊しないようにする必要があります。

しかし、セルまたはそのビューが保持している他のアセットを解放することができます。または、そのセルに保留中のダウンロード要求がある場合、たとえば、セルがオフスクリーンのときに優先度をリセットしたり、キャンセルしたりすることができます。

私はこれを行うにはクリーンな方法は、単にセルが再利用キューに戻されるときに呼び出され-[UITableViewCell prepareForReuse]

をオーバーライドすることだと思います。ユーザーがテーブルを素早く上下に移動している場合、セルが画面外にある瞬間にセルをクリーニングしたくない場合があります(indexPathsForVisibleRowsなどを参照)。

しかし、実際にセルを再利用キューに戻すと、再キューからデキューして再構成するまで、セルが再び画面に表示されないことがわかっているので、その作業を行うのに適しています。