मैं अपने ऑब्जेक्ट की init विधि में NSUserDefaults से लोड करता हूं। क्या मैं अपने ऑब्जेक्ट की डेलोक विधि में NSUserDefaults को सहेज सकता हूं?क्या एनएसयूसर डीफॉल्ट को सिंक्रनाइज़ करने के लिए यह खराब फॉर्म है - (शून्य) dealloc?
कुछ वास्तव में चाहते:
-(void)dealloc {
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:self.filenamesArray forKey:self.defaultsKey];
[userDefaults synchronize];
self.filenamesArray = nil;
self.defaultsKey = nil;
[super dealloc];
}
अच्छा है, बुरा, ठीक है? यदि यह अच्छा नहीं है, तो बेहतर होगा।
संपादित करें:
विस्तृत प्रतिक्रिया के लिए धन्यवाद। उन सभी चीजों को समझ में आता है। एक और कारण मैंने पाया कि यह उपयोगकर्ता डिफ़ॉल्ट को सहेजने के लिए एक बुरी जगह क्यों है, यह है कि डेलोक केवल तभी बुलाया जाता है जब कोई ऑब्जेक्ट अच्छी तरह से खराब हो जाता है। अगर मेरा ऐप मारे गए, तो यह कोड कभी नहीं चलता है। इसी प्रकार, यदि ऐप को पृष्ठभूमि में धक्का दिया जाता है (आईओएस 4) यह नहीं चलता है। मैंने स्पष्ट [userDefaults synchronize]
कॉल भी हटा दिया है। यह मुझे थोड़ा परेशान करता है, लेकिन मैंने इस पर सेब में मेरा विश्वास रखा है। :)
मैं जारेड से सहमत हैं, 'synchronize' केवल" बल को इस्तेमाल किया जाना चाहिए "सिंकिंग। यह उदाहरण के लिए उपयोगी हो सकता है जब डीबगिंग और क्रैश होने का मौका होता है, आदि – mohsenr
मुझे किसी को भी "जादुई" के रूप में प्रस्तुत करने वाले किसी को याद नहीं है। मुद्दा यह है कि यह आमतौर पर खराब अभ्यास है क्योंकि विशेष रूप से आपके ऑब्जेक्ट ग्राफ़ का यह हिस्सा टूट रहा है। आंसू के अलावा कुछ भी करना (जैसे अधिसूचना केंद्र से स्वयं को हटाने आदि) आपके आवेदन का एक और क्षेत्र बनाता है जो आपकी कक्षा के रूप में गलत हो सकता है क्योंकि आपकी कक्षा अधिक जटिल हो जाती है। विशेष रूप से जब आप अन्य वस्तुओं के कमजोर संदर्भों पर विचार करते हैं जो इस ऑब्जेक्ट के समय-समय पर अलविदा कहलाते हैं। कोड अब यह हानिरहित दिखता है लेकिन यह आसानी से बदल सकता है। –
उपरोक्त ने कहा (कमरे से बाहर चला गया), मैं मानता हूं कि कॉल-सिंक्रनाइज़ करने के लिए कॉल अनावश्यक है, हालांकि उपयोगकर्ता डिफ़ॉल्ट को सेट करना वह है जो मुझे मुख्य रूप से समस्या है। ओपी सिंक्रनाइज़ नहीं कर रहा है, वह एक-डेलोक कॉल के दौरान डिफ़ॉल्ट सेट करने का इंतजार कर रहा है। इस भेद को दर्शाने के लिए मैंने अपने मूल उत्तर के शब्द को बदल दिया है। –