コアデータの多対多の関係はNSSetで表されます([エディター... NSManagedObjectサブクラスを作成...]メニューを使用して自動的に生成されます)。
NSSet *を反復する最も効率的な方法はどれですか?
NSSet* groups = [contact groups];
for(Group* group in groups) {
NSString* groupName = [group name];
}
または
NSSet* groups2 = [contact groups];
NSArray* groupsArray = [groups2 allObjects];
for(Group* group in groupsArray) {
NSString* groupName = [group name];
}
または別の方法?
最初はおそらくより効率的です。後者がより効率的である場合、Appleは前者を実装するためにそのルートを使用するだけです。
そうは言っても、パフォーマンスが問題であるように思われる場合は、障害のあるオブジェクトのコアデータに多くの時間を費やしていることになるでしょう。賢明な方法は、groups
を使用してself in %@
でフェッチを行うことです。フェッチリクエストのreturnsObjectsAsFaults
をNOに設定し、適切なrelationshipKeyPathsForPrefetching
が指定されていることを確認します。その最終的な効果は、反復しようとしているすべてのデータが、個別の多数のトリップでオンデマンドでフェッチされるのではなく、バッキングストアへの単一のトリップでフェッチされることです。