2012-09-28 7 views
21

zu-viele Beziehungen in Kerndaten werden durch NSSet dargestellt (wie automatisch generiert durch den Editor ... Ich erstelle NSManagedObject Subclass .. Menü.Wie man eine NSSet (Objective-C) - To-Many Beziehungsdarstellung in Core Data iteriert - effizient?

, die die effizienteste Art und Weise ist ein NSSet *?

iterieren
NSSet* groups = [contact groups]; 
for(Group* group in groups) { 
    NSString* groupName = [group name]; 
} 

oder

NSSet* groups2 = [contact groups]; 
NSArray* groupsArray = [groups2 allObjects]; 
for(Group* group in groupsArray) { 
    NSString* groupName = [group name]; 
} 

oder einen anderen Weg?

+0

Diese Seite: http://cocoawithlove.com/2008/08/nsarray-ornsset-nsdictionary-or.html besagt, dass die Iteration durch ein NSArray viel schneller ist als NSSet, 0,004713 Sekunden vs. 0,025864 Sekunden. – ikevin8me

Antwort

18

Die erste ist wahrscheinlich effizienter zu gestalten. Wenn t Die Letzteren waren effizienter, als Apple diesen Weg einfach nutzen würde, um Ersteres zu implementieren.

Wenn Sie fragen, weil die Leistung ein Problem zu sein scheint, ist es wahrscheinlich mehr, dass Sie eine Menge Zeit mit dem Core Data-Kram der fehlerhaften Objekte verbringen. Ein kluger Schritt wäre es, einen Abruf über self in %@ mit groups durchzuführen; Setzen Sie die Abrufanforderung returnsObjectsAsFaults auf NEIN, und stellen Sie sicher, dass alle geeigneten relationshipKeyPathsForPrefetching angegeben sind. Der Nettoeffekt davon wird sein, dass alle Daten, die Sie durchlaufen werden, in einer einzigen Reise in den Backing Store geholt werden und nicht jedes einzelne Stück davon auf Abruf in einer großen Anzahl von separaten Reisen abgerufen wird.

+1

Referenz: [Verringerter Fault Overhead] (https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Performance.html#//apple_ref/doc/uid/TP40001075-CH25-SW7) von Apple-Dokumentation. –

Verwandte Themen