इस कोड में "गैर-परमाणु" का क्या अर्थ है?
@property(nonatomic, retain) UITextField *theUsersName;
परमाणु और गैर-परमाणु के बीच क्या अंतर है?
धन्यवाद
इस कोड में "गैर-परमाणु" का क्या अर्थ है?
@property(nonatomic, retain) UITextField *theUsersName;
परमाणु और गैर-परमाणु के बीच क्या अंतर है?
धन्यवाद
जवाबों:
Apple डॉक्स पर एक नज़र डालें ।
मूल रूप से, यदि आप कहते हैं nonatomic
, और आप एक्सेसरों का उपयोग करके उत्पन्न करते हैं @synthesize
, तो यदि कई थ्रेड्स एक साथ संपत्ति को बदलने / पढ़ने की कोशिश करते हैं , तो बदनामी हो सकती है। आप आंशिक रूप से लिखित मान प्राप्त कर सकते हैं या अधिक जारी / बनाए रखा जा सकता है, जिससे आसानी से दुर्घटना हो सकती है। (यह संभावित रूप से एक परमाणु एक्सेसर की तुलना में बहुत तेज है, हालांकि।)
यदि आप डिफ़ॉल्ट का उपयोग करते हैं (जो है atomic
; इसके लिए कोई कीवर्ड नहीं हुआ करता था, लेकिन अब है ), तो @synthesize
d विधियाँ एक स्तर-स्तरीय लॉक का उपयोग यह सुनिश्चित करने के लिए करती हैं कि एक ही गुण को कई पढ़ता / लिखता है, क्रमबद्ध हैं। जैसा कि Apple डॉक्स इंगित करता है, इसका मतलब यह नहीं है कि पूरी वस्तु थ्रेड-सुरक्षित है , लेकिन व्यक्तिगत संपत्ति पढ़ / लिखती है।
बेशक, यदि आप उपयोग करने के बजाय अपने स्वयं के एक्सेसर्स को लागू करते हैं @synthesize
, तो मुझे लगता है कि ये घोषणाएं आपके इरादे को व्यक्त करने के अलावा कुछ भी नहीं करती हैं, चाहे संपत्ति थ्रेडसेफ़ तरीके से लागू हो।
atomic
से व्यक्तिगत संपत्तियों तक पहुँचने के दौरान दुर्घटनाओं से बचा जाता है, लेकिन यह सुनिश्चित नहीं करता है कि वस्तु एक पूरे के रूप में (यानी पहले और अंतिम नामों की तरह अलग-अलग गुणों तक पहुँच) करने जा रही है। उचित वस्तु।
इतने सारे लेख और StackOverflow पोस्ट पढ़ने के बाद, और विभिन्न प्रकार की संपत्ति विशेषताओं की जांच करने के लिए डेमो ऐप बनाए, मैंने सभी विशेषताओं की जानकारी एक साथ रखने का फैसला किया
इतना नीचे विस्तृत लेख लिंक है जहाँ आप उपरोक्त सभी विशेषताओं को पा सकते हैं, जो निश्चित रूप से आपकी मदद करेंगे। उन सभी लोगों को बहुत धन्यवाद, जो यहाँ सबसे अच्छा जवाब देते हैं !!
उदाहरण :
@property (retain) NSString *name;
@synthesize name;
उदाहरण:
@property (nonatomic, retain) NSString *name;
@synthesize name;
थ्रेडसाफिटी के बारे में पहले से ही जो कुछ भी कहा गया है, इसके अलावा, गैर-परमाणु गुण परमाणु अभिगमकर्ताओं की तुलना में तेज हैं। यह ऐसी चीज नहीं है जिसके बारे में आपको आमतौर पर चिंता करने की जरूरत है, बल्कि इसे ध्यान में रखें। कोर डेटा जनरेट किए गए गुण आंशिक रूप से इस कारण से गैर-परमाणु हैं।
यदि आप "परमाणु" निर्दिष्ट करते हैं, तो जनरेट किए गए एक्सेस फ़ंक्शंस में कुछ अतिरिक्त कोड होते हैं जो एक साथ अपडेट होने से बचते हैं।
आमतौर पर परमाणु का अर्थ है कि संपत्ति को लिखना / पढ़ना एक ही ऑपरेशन के रूप में होता है। Atomic_operation
आप नीचे दिए गए लेख को पढ़कर इस सामान को संभालने में सक्षम हो सकते हैं।
थ्रेडिंग की व्याख्या गैर-परमाणु उद्देश्य से की गई
गैर-परमाणु - थ्रेड सुरक्षित नहीं है
परमाणु - थ्रेड सेफ - यह डिफ़ॉल्ट गुण विशेषता है।
"परमाणु" का मतलब है कि संपत्ति के लिए उपयोग धागा सुरक्षित है। जबकि "nonatomic" यह के विपरीत है। जब आप ऑब्जेक्टिव-सी में एक संपत्ति संपत्ति डिफ़ॉल्ट रूप से परमाणु रहे हैं, ताकि संश्लेषित accessors संपत्ति को मजबूत पहुँच प्रदान करते हैं की घोषणा एक मल्टीथ्रेडेड वातावरण में - यानी, गेट्टर से लौटाया गया मान या सेट्टर के माध्यम से सेट किया गया हमेशा पूर्ण पुनर्प्राप्त किया जाता है या इस बात की परवाह किए बिना कि अन्य सूत्र समवर्ती रूप से क्या निष्पादित कर रहे हैं। लेकिन यदि आप संपत्ति को गैर-परमाणु के रूप में घोषित करते हैं।
@property (nonatomic, retain) NSString *myString;
तो इसका मतलब है कि एक वस्तु संपत्ति के लिए एक संश्लेषित अभिग्रहणकर्ता सीधे मूल्य को वापस करता है। गैर-परमाणु विशेषता का प्रभाव पर्यावरण पर निर्भर करता है। डिफ़ॉल्ट रूप से, संश्लेषित एक्सेसर्स परमाणु होते हैं। अतः परमाणु की तुलना में गैर-परमाणु काफी तेज है।
एक बहु धागे के लिए है। एक नहीं है