उद्देश्य-सी में आपको परमाणु और गैर-परमाणु गुणों में अंतर होता है:
@property (nonatomic, strong) NSObject *nonatomicObject;
@property (atomic, strong) NSObject *atomicObject;
मेरी समझ से आप कई थ्रेड्स से परमाणु के रूप में परिभाषित गुणों को सुरक्षित रूप से पढ़ और लिख सकते हैं, जबकि एक ही समय में कई थ्रेड्स से गैर-परमाणु गुणों या ivars को लिखने और एक्सेस करने के परिणामस्वरूप अनिर्धारित व्यवहार हो सकता है, जिसमें खराब एक्सेस त्रुटियां शामिल हैं।
तो अगर आप स्विफ्ट में इस तरह एक चर है:
var object: NSObject
क्या मैं इस चर को सुरक्षित रूप से समानांतर में पढ़ और लिख सकता हूं? (ऐसा करने के वास्तविक अर्थ पर विचार किए बिना)।
atomic
आम तौर पर सरल डेटा प्रकारों को छोड़कर, किसी संपत्ति के साथ थ्रेड-सुरक्षित इंटरैक्शन के लिए पर्याप्त नहीं माना जाता है। वस्तुओं के लिए, आम तौर पर ताले (जैसे, NSLock
या @synchronized
) या जीसीडी कतार (जैसे, धारावाहिक कतार या "पाठक-लेखक" पैटर्न के साथ समवर्ती कतार) का उपयोग करके थ्रेड्स तक पहुंच को सिंक्रनाइज़ किया जाता है ।
atomic
वस्तुओं के लिए धागा-सुरक्षा सुनिश्चित नहीं करता है; और (बी) यदि कोई थ्रेड-सेफ्टी (अन्य चीजों के बीच, साथ-साथ पढ़ने / लिखने को रोकने) को सुनिश्चित करने के लिए उपर्युक्त सिंक्रोनाइज़ेशन तकनीकों में से एक का सही उपयोग करता है, तो परमाणु मुद्दा मूक है। लेकिन हमें अभी भी सरल डेटा प्रकारों के लिए इसकी आवश्यकता है / चाहते हैं, जहां atomic
वास्तविक मूल्य है। अच्छा प्रश्न!
@atomic
या@nonatomic
। या बस डिफ़ॉल्ट रूप से परमाणु। (स्विफ्ट इतनी अधूरी है, हम अभी बहुत कुछ नहीं बता सकते हैं)