2

「コア データ プログラミング ガイド」では、Apple がオブジェクトのコレクションを一括起動する方法を推奨しています。以下のように実装する必要があります。

NSArray * arrayOfFaults = [NSArray arrayWithObjects:object1,object2,nil];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self IN %@", arrayOfFaults];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Foo"];
[fetchRequest setPredicate:predicate];
[fetchRequest setReturnsObjectsAsFaults:NO];
[managedObjectContext executeFetchRequest:fetchRequest error:NULL];

しかし、iOS 6 シミュレーターで「Core Data」Instrument を使用すると、このフェッチが他のフェッチとほぼ同じ時間であることがわかりました。つまり、ディスクに移動し、キャッシュを使用しませんでした。理不尽です。これは "IN" 句であるため、Core Data は objectID を使用してキャッシュ内のオブジェクトを検索できます。それらがすべてキャッシュにある場合は、ディスクに移動する必要はありません。

arrayOfFaults 内のこれらのオブジェクトがキャッシュにあると確信しています。上記のコードを次のコードに置き換えると、キャッシュ ミスは報告されません。

for (NSManagedObject *object in arrayOfFaults){
   [object willAccessValueForKey:nil];
}

だから私の質問は: キャッシュを利用しながら障害オブジェクトをバッチ処理する方法はありますか?

4

0 に答える 0