मैं शर्त लगाता हूं कि लगभग हर मामले में, plist फ़ाइल में कुछ भी गलत नहीं है। प्लिस्ट डेटा को लोड करने और सहेजने के लिए ऐप्पल के कार्यों को बहुत ध्यान और बहुत अधिक उपयोग मिलता है। लगभग हर बग अब तक निश्चित रूप से पाया और तय किया गया है।
(विचार करें कि सभी प्रकार की चीजों के लिए प्लिस्ट का उपयोग किया जाता है, जैसे ड्रैग-एन-ड्रॉप और क्लिपबोर्ड, एप्लिकेशन लॉन्च करने के लिए सैंडबॉक्स अनुमति, उपयोगकर्ता हर ऐप के लिए इंटरफेस और यहां तक कि फाइंडर में प्रदर्शित करने के लिए कौन सा आइकन है। यह अविश्वसनीय होगा। प्लिस्ट-राइटिंग कोड में एक बग था जो सिर्फ कुछ ऐप्स के लिए वरीयता फ़ाइलों को पेंच करने के लिए हुआ था, लेकिन इनमें से किसी भी अन्य चीज़ के लिए नहीं!)
एक ऐप की वरीयता फ़ाइल (प्लिस्ट) बस डिस्क पर इसकी कुछ मेमोरी मेमोरी संरचनाओं को संग्रहीत कर रही है। इसलिए अगर ऐप में बग है जो किसी चीज को गलत तरीके से सेट करता है, तो वह सेव हो जाता है।
अक्सर जब कोई ऐप गलत व्यवहार करना शुरू करता है, तो आप बस इसे छोड़ सकते हैं और पुनः आरंभ कर सकते हैं। जो इसके कई हिस्सों को रीसेट करता है, और समस्या को ठीक कर सकता है। हालाँकि, डिस्क से वरीयता फ़ाइलें पुनः लोड की जाती हैं, इसलिए यदि एप्लिकेशन के प्रभावित हिस्से को लगातार वरीयता में बचाया गया था, तो ऐप को पुनरारंभ करने से कोई प्रभाव नहीं पड़ेगा: खराब मूल्य बस फिर से लोड हो जाएगा। जब वरीयता फ़ाइल को हटाने में मदद मिल सकती है। यह ऐप को पुनरारंभ करने जैसा है, लेकिन उन चीजों के लिए जो सहेजे गए हैं।
ये चीजें हो सकती हैं क्योंकि प्रोग्रामर यह मानते हैं कि उनके ऐप का डेटा सही है। यदि एक रंग को केवल मानक रंग पहिया नियंत्रण पर क्लिक करने वाले उपयोगकर्ता द्वारा चुना जा सकता है, तो वे संभवतः यह सत्यापित करने के लिए कोई अतिरिक्त कार्य नहीं करते हैं कि इसका उपयोग करने के लिए यह सही है। (तुलना में, सफ़ारी जैसी ऐप हर काम को सत्यापित करने का एक टन अतिरिक्त काम करती है, क्योंकि यह फाइलों को इंटरनेट से सीधे लोड और चलाता है।)
उल्टा यह है कि यह लगभग हमेशा सही होता है, और यह बहुत आसान है यदि आप मानते हैं कि आंतरिक मूल्य सही हैं। नकारात्मक पक्ष यह है कि यदि कोई खराब मान किसी तरह से बोलता है (जैसे उपयोगकर्ता ने पूरी तरह से अनपेक्षित किया था), तो सब कुछ रीसेट होने तक चीजें गर्म हो सकती हैं।
-writeToFile:atomically:YES
("डेटा एक बैकअप फ़ाइल के लिए लिखा गया है, और फिर - कोई त्रुटि नहीं होती है, यह मानते हुए - बैकअप फ़ाइल का नाम निर्दिष्ट किया गया है")। POSIXrename()
फ़ंक्शन गारंटी देता है कि फ़ाइल मौजूद होगी "भले ही सिस्टम को ऑपरेशन के बीच में क्रैश होना चाहिए"।