0

アプリの 1 つで Core Data を広範囲に使用しています。通常、UITableView には、NSFetchedResultsController を使用しています。しかし、特定のView Controllerでは、いくつかのデータの合計を表示する必要があります。最初にデータを取得してから、forサイクルを作成してデータを分析し、計算する必要があります。

ただし、非常に大量のデータ (たとえば、それぞれが NSString と float を保持する 10.000 オブジェクト) をフェッチし、for サイクルを作成すると、アプリがクラッシュする可能性があると考えました。これは深刻なリスクですか?もしそうなら、どうすれば解決できますか?(NSAutoReleasePoolを作成して、計算後に各オブジェクトを追加して解放しようと思ったのですが、ARCを使っているのでできないと思います)。

4

3 に答える 3

1

そのようなループで自動解放プールを使用します...

@autoreleasepool {
    // Insert code in here
}

また、retainsRegisteredObjects管理対象オブジェクト コンテキストで to が NO であることを確認する必要があります。さらに、本当に使いすぎた場合は、手動で障害を解放することで障害を制御できます。refreshObject:mergeChanges:

于 2012-08-16T23:33:49.330 に答える
0

アーカイブしようとしている複雑な計算を行うために、コア データ エンティティからすべてのプロパティをフェッチする必要はありません。NSFetchRequest で setPropertiesToFetch: を使用するだけで、必要なプロパティのみを取得できます。また、フェッチ リクエストに setBatchSize を使用して、コア データにオブジェクトをフォールトさせ、フットプリントを低く維持します。

于 2012-08-16T23:45:38.863 に答える
0

提案されたループで問題ないと思います。

batchSizeフェッチ要求の を設定することで、コア データに常に控えめな量のデータを取得するように指示できます。その後、Core Data がインクリメンタル フェッチを行い、メモリ管理を行います。

于 2012-08-16T15:25:30.293 に答える