संक्षेप में: क्या यह तेज़/सस्ता है? क्या तेजी से पहुंच के लिए स्मृति में NSUserDefaults से एक मूल्य संग्रहीत करने के लिए समझ में आता है?आईओएस पर NSUserDefaults तक पहुंच सस्ता माना जाता है?
लंबा: कहें, मेरे पास एनएसयूसर डीफॉल्ट से संग्रहीत और पढ़ने के लिए महत्वपूर्ण संख्या में मूल्य हैं; उन मूल्यों को अक्सर पढ़ने (पढ़ने) की आवश्यकता के साथ।
नीचे स्निपेट में, मैं एक निजी संग्रहीत संपत्ति शुरू करता हूं, और इसे संबंधित NSUserDefaults मान के साथ समन्वयित करता हूं - इसलिए जब मुझे इसे पढ़ने की आवश्यकता होती है, तो मैं संपत्ति पढ़ता हूं।
यदि डिफ़ॉल्ट से सीधे पढ़ना वास्तव में तेज़ है, तो मैं निजी संपत्ति को स्पष्ट रूप से हटा दूंगा। लेकिन मुझे इसके बारे में अनिश्चितता है। क्या यह तेज़ है? भविष्य पाठकों के लिए
private var _loggedIn = NSUserDefaults.standardUserDefaults().boolForKey("loggedIn")
public var loggedIn: Bool {
get {
return _loggedIn
}
set {
_loggedIn = newValue
NSUserDefaults.standardUserDefaults().setBool(newValue, forKey: "loggedIn")
NSUserDefaults.standardUserDefaults().synchronize()
}
}
स्पष्टीकरण: प्रश्न के बारे में पढ़ रही है, लेखन/सिंक्रनाइज़ करना है, जो (के रूप में जवाब में बताया) है तेजी से और न ही सस्ते में नहीं नहीं।
.synchronize()
को वैध कारण के लिए सेटटर में बुलाया जाता है - मेरे विशिष्ट मामले में यह तुरंत सिंक हो जाना महत्वपूर्ण है, इसलिए मैं तर्क अखंडता के लिए प्रदर्शन का त्याग करता हूं। सामान्य मामलों में, आपको यह विचार करना चाहिए कि आपको इसे कॉल करने की आवश्यकता है या नहीं - या सिस्टम को लिखने के लिए उपयुक्त समय चुनने दें।
.. वास्तव में, अब मैं इसे देखता हूं, मैं संग्रहीत संपत्ति को स्निपेट में रखता हूं, यह तर्क अखंडता प्रदान करेगा (जब तक अन्य स्थानों से पहुंच गेटटर के माध्यम से होती है, और सीधे से नहीं userDefaults)। तो मैं यहां भी synchronizing
से बच सकता हूं।
एक्सेसिंग सस्ता है, अगर आप इसे जल्दी से कर रहे हैं तो सिंक्रनाइज़िंग –