2012-06-02 14 views
28

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/Reference/Reference.html यहक्या NSUserDefault थ्रेड सुरक्षित है?

है ... उन संपादन किसी भी उचित नियंत्रणों को अक्षम करके कि वरीयता से रोकने चाहिए कहते हैं।

NSUserDefaults क्लास थ्रेड-सुरक्षित है। NSURL के हठ और फ़ाइल संदर्भ यूआरएल ...

यह लंबे समय चर्चा यह

http://www.cocoabuilder.com/archive/cocoa/155227-nsuserdefaults-thread-safety.html

नहीं है तो जो एक सही है कहते हैं? राय का अंतर भी क्यों।

+3

ध्यान रखें कि आपने जिस लिंक को पोस्ट किया है, वह 2006 से है, इसलिए यह पूरी तरह से संभव है कि तब से NSUserDefaults थ्रेड सुरक्षित हो गया है। – UIAdam

+0

कोई भी इतिहास के बारे में और जानता है? शायद NSUserDefaults थ्रेड सुरक्षित है लेकिन यह सिंगलटन नहीं है। उस तरह की चीस। –

+0

जब तक आपके पास ** हालिया ** साक्ष्य अन्यथा सुझाव देने के लिए नहीं है, तो मुझे लगता है कि दस्तावेज़ शायद यह कहने में सही हैं कि कक्षा थ्रेड सुरक्षित है। चाहे यह एक कस्टम इंस्टेंस या 'standardUserDefaults' उदाहरण है (मुझे लगता है कि" सिंगलटन "द्वारा आपका मतलब है), वे अंततः एक ही कक्षा के उदाहरण हैं और या तो थ्रेड सुरक्षित होंगे या नहीं। – UIAdam

उत्तर

56

ऐप्पल आईओएस 5.1 और ओएस एक्स 10.7 दस्तावेज का कहना है कि यह थ्रेड-सुरक्षित है; इसलिए यह थ्रेड-सुरक्षित है।

+0

क्या पहले यह सहेजा नहीं गया है? –

+0

चर्चाओं के बारे में क्या? – Tieme

+2

चर्चा की तारीख को देखो। यह बहुत पुराना है। –

26

यदि आप कार्यान्वयन की तलाश में हैं तो 10.10 और आईओएस 8 के लिए बोलते हुए आप पाएंगे कि -[NSUserDefaults setObject:forKey:]__CFPreferencesSetAppValueWithContainer पर कॉल कर रहा है, जो अंत में +[CFPrefsSource withSourceForIdentifier:user:byHost:container:perform:] में समाप्त हो जाएगा। यह विधि मान युक्त शब्दकोष तक पहुंच को लॉक करने के लिए pthread_mutex_t का उपयोग कर रही है।

तो एनएसयूसर डीफॉल्ट थ्रेड सुरक्षित है।

+1

वैसे भी कार्यान्वयन को कैसे देखें? –

+0

हूपर डिससेबलर (या एक्सकोड) का उपयोग करके असेंबली पढ़ना – McZonk