परमाणु बनाम गैर परमाणु गुण क्रैश कोर्स

उद्देश्य-सी गुणों को परमाणु या गैर-परमाणु के रूप में परिभाषित किया जा सकता है।

दोनों के बीच अंतर क्या है और स्विफ्ट गुण कैसे व्यवहार करता है? परमाणु या गैर परमाणु?

परमाणु गुण

एक संपत्ति को परमाणु के रूप में परिभाषित करना गारंटी देगा कि एक वैध मूल्य वापस किया जाएगा। ध्यान दें कि मान्य हमेशा सही नहीं होता (इस पोस्ट के अगले भाग में उस पर अधिक)।

इसका मतलब यह भी नहीं है कि परमाणु गुण सूत्र सुरक्षित हैं। विभिन्न सूत्र एक ही समय में लिखने और पढ़ने का प्रयास कर सकते हैं। दो मूल्यों में से एक को वापस कर दिया जाएगा - परिवर्तन से पहले मूल्य या परिवर्तन का मूल्य

मूल्य निर्धारण से पहले और बाद में लॉकिंग और अनलॉक करने के कारण परमाणु गुण मामूली प्रदर्शन से प्रभावित होते हैं।

गुण के लिए परमाणु डिफ़ॉल्ट व्यवहार है - यदि आप कुछ भी निर्दिष्ट नहीं करते हैं तो यह आपको मिलता है।

परमाणु गुण और सूत्र उदाहरण

मान लें कि हमारे पास एक परमाणु संपत्ति है:

बिंदु = CGPoint (x: 10, y: 10)

हमारे ऐप में हमारे पास तीन सूत्र हैं जो एक साथ हमारी पॉइंट प्रॉपर्टी तक पहुंचने की कोशिश कर रहे हैं।

  • थ्रेड ए CGPoint संपत्ति को पढ़ने की कोशिश करता है
  • थ्रेड बी बिंदु सेट कर रहा है = CGPoint (x: 1, y: 1)
  • थ्रेड C सेटिंग पॉइंट है = CGPoint (x: 5, y: 5)

बड़ा सवाल यह है कि थ्रेड A में क्या लौटाया जाएगा?

निम्नलिखित तीन मूल्यों में से एक:

(x = 10, y = 10)
(x = 1, y = 1)
(x = 5, y = 5)

एक और सवाल हम पूछ सकते हैं - बिंदु संपत्ति का अंतिम मूल्य क्या होगा?

निम्नलिखित दो मूल्यों में से एक:

(x = 1, y = 1)
(x = 5, y = 5)

गैर परमाणु गुण

गैर परमाणु गुणों की वापसी के मूल्य के बारे में कोई गारंटी नहीं है। यह सही मूल्य, आंशिक रूप से लिखित मूल्य या यहां तक ​​कि कुछ कचरा मूल्य भी हो सकता है।
अधिकांश चीजें जो सुरक्षित नहीं हैं - यह इस गुणों तक पहुंचने की बढ़ी हुई गति के साथ आती हैं।

गैर परमाणु गुण और सूत्र उदाहरण

आइए एक ही बिंदु की संपत्ति को लें और वही तीन सूत्र जो परमाणु गुण सूत्र के उदाहरण में समान चीजें करते हैं।

थ्रेड A में क्या लौटाया जाएगा?

अनजान! यह पिछले उदाहरण में तीन अलग-अलग मूल्यों में से एक हो सकता है। यह भी हो सकता है (x = 5, y = 1) दो धागे एक ही समय में मूल्य निर्धारित करने की कोशिश कर रहे हैं। मान आंशिक रूप से लिखा गया है और हम आंशिक रूप से लिखित मूल्य वापस पा रहे हैं।

ऑब्जेक्टिव-सी रनटाइम ऐसा कैसे करता है?

आइए, ऑब्जेक्टिव-सी रन टाइम के लिए "सेट वैल्यू" विधि देखें।

ध्यान दें कि गैर परमाणु गुण सीधे संपत्ति के मूल्य को निर्धारित कर रहे हैं जबकि परमाणु संपत्ति सेट ऑपरेशन की सुरक्षा के लिए ताले का उपयोग कर रहे हैं।

स्विफ्ट के बारे में क्या?

स्विफ्ट गुण डिफ़ॉल्ट रूप से गैर परमाणु हैं।
लेकिन - कोको और ऑब्जेक्टिव-सी (स्विफ्ट 3.1) के साथ ऐप्पल की यूजिंग स्विफ्ट के अनुसार:

एटमॉसिटी संपत्ति विशेषताएँ (परमाणु और गैर-परमाणु) संबंधित स्विफ्ट संपत्ति घोषणा में परिलक्षित नहीं होती हैं, लेकिन उद्देश्य-सी कार्यान्वयन की परमाणुता की गारंटी तब भी होती है जब स्विफ्ट से आयातित संपत्ति का उपयोग किया जाता है।

इसलिए - यदि आप ऑब्जेक्टिव-सी में परमाणु संपत्ति को परिभाषित करते हैं तो स्विफ्ट द्वारा उपयोग किए जाने पर यह परमाणु रहेगा।