0

データベースをリモートでクエリすることによって部分的にロードされるフィード(UITableView)があります。データベースには、取得する必要のある1000行が含まれています。各クエリで10行を取得します。結果には主にテキストが含まれていますが、各行の画像も保存しています。したがって、最初の10行を取得することから始め、ユーザーが10行目の終わりでUITableViewを下にスクロールすると、次の10行を取得するために別のクエリを実行します。これまでのところ、合計20行がnsmutablearrayに格納されています。この手順は、170行を取得するまで続きます。次に、Xcodeでメモリの問題が発生し、アプリがクラッシュします。だから私はアプリをクラッシュさせることなくUITableViewの1000行すべてをロードする方法を理解しようとしています。

新しいクエリが実行されるたびに前の10行を削除して、nsmutablearrayに常に10個のオブジェクトが含まれるようにすることを考えています。私は正しいと思いますか?私はこれを初めてやっています。

助けていただければ幸いです。ありがとう。

4

3 に答える 3

2

テーブルビューをロードしている場合、それはあなたのやり方ではありません。オンデマンドで行をロードしcellForRowAtIndexPath、表示されていない行を iOS に削除させます。また、新しいセルを作成するときはdequeueReusableCellWithIdentifier、その呼び出しが nil を返す場合にのみ新しいセルを作成します。

要素はオンデマンドで DB から取得されるため、メイン メモリ内の既存のセルに一度に 15 ~ 20 を超える要素が存在することはありません。

場合によっては、メイン メモリに保持したい個々のセルに関するデータがあるかもしれませんが、通常は行ごとに数個の小さなオブジェクトにする必要があります。1000 要素の NSArray にそれほど多くを収めても問題ありません。

作成したすべてのセルの配列を保持しないでください。iOS がそれを行い、画面外にスライドするセルを解放して、ストレージを保持します。

于 2012-09-21T00:35:31.153 に答える
1

NSFetchResultsController でコア データを使用することを考えたことはありますか? それらを一緒に使用すると、ほとんどの場合、メモリの問題を回避するのに役立ちます

于 2012-09-21T00:28:44.597 に答える
0

配列に 3 ページの行を保持します。前後に 1 ページが必要です。これにより、インターフェイスが高速化されます。非同期インターフェイスが同期データベース呼び出しを待機する危険を冒したくありません。また、特別な理由がない限り、画像をデータベースに保存することもありません。

于 2012-09-21T02:21:20.833 に答える