2010-04-24 15 views

उत्तर

49

आम तौर पर परमाणु का मतलब ऑपरेशन को बाधित नहीं किया जा सकता पूरा हो जाएगा या कोई प्रभाव नहीं होगा। फाइलें लिखते समय, यह एक अस्थायी फ़ाइल में लिखकर पूरा किया जाता है, जब मूल पूर्ण होने पर मूल को अस्थायी रूप से बदल दिया जाता है।

परमाणु फ़ाइल लिखते समय एक क्रैश का अर्थ है कि मूल संशोधित नहीं है और एक कचरा फ़ाइल है जिसे हटाया जा सकता है। सामान्य रूप से लिखते समय एक दुर्घटना का मतलब होगा कि एक अच्छी अच्छी फ़ाइल दूषित है।

प्रदर्शन के अनुसार लागत न्यूनतम है। लिखने के दौरान आपके पास फाइल की दो प्रतियां होंगी। फ़ाइल प्रतिस्थापन फ़ाइल सिस्टम स्तर पर एक बहुत ही सरल ऑपरेशन है।

संपादित करें: धन्यवाद zneak

+6

परमाणु इसका मतलब है कि ऑपरेशन पूरी तरह से या बिल्कुल नहीं होता है। इसे बाधित या बंद या फिर से शुरू किया जा सकता है, यह पूरी होने तक सिस्टम की स्थिति में बदलाव नहीं करेगा। हालांकि, निष्कर्ष वही बना हुआ है। – zneak

+0

मैं इसे "फ़ाइल की दो प्रतियां" के रूप में वाक्यांश नहीं दूंगा क्योंकि यह पढ़ने के लिए बहुत आसान है क्योंकि सटीक उसी डेटा की दो प्रतियां, जो नहीं हो रहा है। –

0

फ़ाइल सिस्टम लिखने/परमाणु लेखन के लिए चक्र का नाम बदलने का सहारा लेना नहीं है। फाइल सिस्टम जो लॉकिंग सेमेन्टिक्स हैं, आपको पोर्ट्स या सभी फाइलों को 'लॉक' करने की अनुमति देते हैं, या कुछ मामलों में परमाणुता में मदद करने के लिए कुछ फाइलें जैसे फाइलों को जोड़ती हैं।

@ रैंडी, विखंडन के बारे में आपकी धारणा दोनों गलत होने की संभावना है। अधिकांश फाइल सिस्टम पर, एक पूरी फाइल लिखना और इसे बंद करना परिणामस्वरूप कम खंडित फ़ाइल होगा, और एक ही लिखित में एक बड़ी फाइल लिखने से निश्चित रूप से बड़े ब्लॉक का बेहतर उपयोग होगा। यदि आपका मतलब है कि फ़ाइल ब्लॉक डिस्क पर 'रेंगने' की अधिक संभावना है, जो आपके फाइल सिस्टम में लेआउट वरीयताओं पर निर्भर करता है। यदि आप फ्लैश करने के लिए लिख रहे हैं, तो संभवतः आप फाइल सिस्टम को उपलब्ध स्टोरेज में लिखने के लिए लिखने के लिए एक प्रकार के स्व-स्तरीय स्तर के रूप में रेंगना चाहते हैं।

0

लेखन परमाणु रूप से अधिक कदम उठाते हैं - अतिरिक्त सहायक फ़ाइल बनाई गई है। NSString कक्षा Reference बताते हैं:

यदि हां, रिसीवर एक सहायक फाइल करने के लिए लिखा है, और फिर सहायक फ़ाइल पथ को बदल दिया गया है। यदि नहीं, तो रिसीवर सीधे पथ पर लिखा गया है। YES विकल्प गारंटी देता है कि पथ, यदि यह पर मौजूद है, तो लेखन के दौरान सिस्टम को क्रैश होने पर भी दूषित नहीं किया जाएगा।

यहाँ plists के मामले में उदाहरण है:

[array writeToFile:path atomically:YES]; 

जब "हाँ", तो plist सिर्फ एक बार भले ही आप कोड XCode में कई बार चलाने के अद्यतन किया जाता है,

[array writeToFile:path atomically:NO]; 

जब "नहीं" यह उतना ही अपडेट किया जाता है जितना आप एक ही कोड चलाते हैं (दोहराया अद्यतन)।

+0

को पता नहीं है कि कुछ लोगों ने बिना किसी स्पष्टीकरण के जवाब क्यों दिया। –

+1

मुझे लगता है क्योंकि उनका मानना ​​है कि आपको गंभीर प्रोग्रामिंग त्रुटियों को दूर करने के लिए किसी एपीआई की अनियंत्रित जटिलताओं पर भरोसा नहीं करना चाहिए। – malhal

+0

टिप्पणी के लिए धन्यवाद, मैंने इसे और समझाया। –

संबंधित मुद्दे