2012-09-28 9 views
21
कोर डाटा में

करने के लिए कई रिश्ते 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]; 
} 

या एक और तरीका?

+0

यह पृष्ठ: http://cocoawithlove.com/2008/08/nsarray-or-nsset-nsdictionary-or.html कहता है कि एनएसएआरएआरई के माध्यम से पुनरावृत्ति एनएसएसएटी की तुलना में बहुत तेज है, 0.004713 सेकंड बनाम 0.025864 सेकेंड। – ikevin8me

उत्तर

18

पहले शायद और अधिक कुशल है।, तो टी वह बाद में अधिक कुशल थे तो ऐप्पल बस उस मार्ग का उपयोग पूर्व को लागू करने के लिए करेगा।

कहा जा रहा है कि, यदि आप पूछ रहे हैं क्योंकि प्रदर्शन एक मुद्दा प्रतीत होता है तो शायद यह अधिक है कि आप त्रुटिपूर्ण वस्तुओं के कोर डेटा सामान पर बहुत समय व्यतीत कर रहे हैं। groups के साथ self in %@ पर एक स्मार्ट चाल लाने के लिए एक स्मार्ट कदम होगा; fetch अनुरोध के returnsObjectsAsFaults को NO पर सेट करें और सुनिश्चित करें कि कोई उपयुक्त relationshipKeyPathsForPrefetching निर्दिष्ट है। इसका शुद्ध प्रभाव यह होगा कि आप जिस डेटा को फिर से शुरू करने वाले हैं, उसे अलग-अलग यात्राओं में मांग के आधार पर प्रत्येक व्यक्तिगत टुकड़े की बजाय बैकिंग स्टोर की एक ही यात्रा में लाया जाता है।

+1

संदर्भ: [कमजोर फॉल्ट ओवरहेड] (https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Performance.html#//apple_ref/doc/uid/TP40001075-CH25-SW7) से ऐप्पल दस्तावेज –