web-dev-qa-db-ja.com

NSSet(Objective-C)-Core Dataでの多対多の関係表現を効率的に反復する方法-

コアデータの多対多の関係は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];
}

または別の方法?

23
ikevin8me

最初はおそらくより効率的です。後者がより効率的である場合、Appleは前者を実装するためにそのルートを使用するだけです。

そうは言っても、パフォーマンスが問題であるように思われる場合は、障害のあるオブジェクトのコアデータに多くの時間を費やしていることになるでしょう。賢明な方法は、groupsを使用してself in %@でフェッチを行うことです。フェッチリクエストのreturnsObjectsAsFaultsをNOに設定し、適切なrelationshipKeyPathsForPrefetchingが指定されていることを確認します。その最終的な効果は、反復しようとしているすべてのデータが、個別の多数のトリップでオンデマンドでフェッチされるのではなく、バッキングストアへの単一のトリップでフェッチされることです。

19
Tommy