2010-07-26 15 views
8

संभव डुप्लिकेट:'परमाणु' और गैर-परमाणु के बीच क्या अंतर है?

@property(nonatomic, retain) NSString *str; 

और

@property(atomic, retain) NSString *str; 
:

Atomic vs nonatomic properties

मैं सिर्फ पता है कि के बीच differneve है चाहते कोड की दो पंक्तियाँ शोध करे

थैंक्स, सम्मान, टेक 3

+0

में रिलीज है यहाँ का जवाब http://stackoverflow.com/a/32942413/1961064 –

उत्तर

8

किसी थ्रेड से पहले गायब होने से वस्तुओं को रोकने के लिए उन्हें रोकने का मौका मिलने के लिए संदर्भित बहु थ्रेडेड वातावरण में परमाणु गुण आवश्यक हैं।

पर विचार करें एक प्राप्त एक्सेसर की भोली कार्यान्वयन:

@interface MyObject : NSObject 
{ 
    id myPropertyIVar; 
} 
-(id) myProperty; 

@end 

@implementation MyObject 

-(id) myProperty 
{ 
    return myPropertyIvar; 
} 

// other stuff 

@end 

यह सिवाय इसके कि यदि आप दिए गए मान -myProperty से दिए गए मान को बनाए रखना से पहले MyObject के कहने रिलीज अच्छी तरह से पुनः आवंटित की जाती किया जा सकता है सब ठीक है। इस कारण से, यह इस तरह -myProperty लागू करने के लिए सुरक्षित है:

-(id) myProperty 
{ 
    return [[myPropertyIvar retain] autorelease]; 
} 

यह अब एक ही लड़ी वातावरण में पूरी तरह से सुरक्षित है।

दुर्भाग्य से, एक बहुप्रचारित वातावरण में दौड़ की स्थिति है।

  • MyObject के कहने इवर के कारण जारी किया गया और एक अन्य धागे से पुनः आवंटित की जाती है: धागा किसी भी समय बाधित हो जाए इससे पहले बनाए रखने गिनती बनाए रखने की संख्या बढ़ जाने के बाद निम्न में से किसी आप एक कचरा सूचक प्राप्त करने के लिए कारण होगा जारी होने की और पुनः आवंटित की जाती
  • myProperty एक और धागा पुराने संस्करण के कारण द्वारा पुन: सौंपा है रिलीज होने और

पुनः आवंटित की जाती इस कारण से, सभी संपत्ति एक ताला द्वारा संरक्षित किया जाना चाहिए करने के लिए एक्सेस करता है। प्राप्तकर्ता इस तरह कुछ दिखता है।

-(id) myProperty 
{ 
    // lock 
    return [[myPropertyIvar retain] autorelease]; 
    // unlock 
} 

सेट एक्सेसर इसी तरह से सुरक्षित है और इसलिए है -dealloc

+0

Thanx बहुत जेरेमीपी। मैं वास्तव में आपके जवाब से बहुत कुछ मिला। – tek3

+0

पूरी कहानी नहीं है। :) एक परमाणु संपत्ति वास्तव में थ्रेड सुरक्षा की गारंटी नहीं देता है। यह केवल गारंटी देता है कि आप एक अभिन्न मूल्य प्राप्त करेंगे/सेट करेंगे। – bbum

+0

@bbum: हा, मुझे पता था कि मुझे भी थोड़ा सा रखना चाहिए था। मेरी रक्षा में, आप देखेंगे कि मैंने परमाणु गुणों की गारंटी भी थ्रेड सुरक्षा की गारंटी नहीं दी है, केवल यह है कि यह एक बहुप्रचारित वातावरण में सुरक्षित रूप से संपत्ति प्राप्त करने के लिए * संभव * बनाता है। – JeremyP

2

ऐप्पल दस्तावेज़ यह सब ठीक से समझाते हैं। गुणों के बारे में जानने के लिए, उनके परमाणुता सहित, this page पढ़ें।

+0

यह लिंक मर चुका है, संशोधन पर विचार है। – borrrden

+0

2015 लिंक यहां है: https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Introduction/Introduction.html –

संबंधित मुद्दे