2011-01-11 26 views
21

मैं कुछ विदेशी कोड में कुछ पढ़ा है और मैं अपने इस धारणा जाँच करना चाहते हैं:क्या @ सिंक्रनाइज़ (स्वयं) एक ब्लॉक बनाता है जहां स्वयं उपसर्ग गुणों पर अनावश्यक है?

@synchronized(self)self उपसर्ग से छुटकारा पाने के लिए जब एक संपत्ति की स्थापना किया जाता है।

तो नीचे दिए गए मेरे उदाहरण में, मैं उदाहरण के strText को सेट कर रहा हूं, न केवल स्थानीय चर, सही?

- (void)myfunction{ 
    NSString * strText = @"var in function"; 
    @synchronized(self) 
    { 
     strText = @"var class (self.strText)"; 
    } 

} 

उत्तर

39

कृपया पढ़ें इस Documentation

@synchronized() निर्देश एक एकल थ्रेड द्वारा उपयोग के लिए कोड का एक वर्ग अवरोधित करता है। अन्य धागे तब तक अवरुद्ध होते हैं जब तक थ्रेड संरक्षित कोड से बाहर निकलता है-यानी, @synchronized() ब्लॉक में अंतिम कथन के बाद निष्पादन जारी रहता है।

@synchronized() निर्देश उद्देश्य-सी ऑब्जेक्ट, self सहित एकमात्र तर्क के रूप में लेता है।

Massimo Cafaro pointed out के रूप में: "। यह सब पारस्परिक अपवर्जन वस्तुओं को बनाने के पहले आवेदन दौड़ की स्थिति से बचने के लिए बहु-क्रम बन जाता है, सबसे सुरक्षित है"

+2

प्रलेखन लिंक अब अप्रचलित है। कृपया इसे देखें: https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Multithreading/ThreadSafety/ThreadSafety.html#//apple_ref/doc/uid/10000057i-CH8-SW1 – cescofry

+0

@cescofry, हाँ वह लिंक पुराना था। मैं आपके दिए गए लिंक के साथ अपना जवाब अपडेट करता हूं। धन्यवाद। – Tirth

8

@ सिंक्रनाइज़ (स्वयं) स्वयं से छुटकारा पाने के लिए उपयोग किया जाता है। उपसर्ग।

तो मेरे उदाहरण में मैंने स्ट्रैट को फ़ंक्शन में सेट नहीं किया है, मैंने इसे कक्षा में सेट किया है।

दो अवधारणाओं को भंग किया जा रहा है।

  1. @synchronized(self) { ... } केवल सेमफोर के रूप में self ऑब्जेक्ट का उपयोग करके ब्लॉक को ताला लगा देता है।
  2. उद्देश्य-सी में, एक hypothetical with कथन की तरह कुछ भी नहीं है, जो अन्य भाषाओं में self.whatever की आवश्यकता को हटा देता है ताकि whatever हो सके। भाषा पर ब्रश करने के लिए स्टैनफोर्ड सीएस 1 9 3 पी ऑनलाइन पाठ्यक्रम लेना चाहते हैं।
+7

यह जवाब क्यों? यह सवाल का जवाब दे सकता है लेकिन - कोई अपराध नहीं - आप बस तंग और अनुपयोगी के रूप में आते हैं। –

+5

@ सिंक्रनाइज़ का कोई प्रभाव नहीं पड़ता है कि आपको "स्वयं" की आवश्यकता है या नहीं। उपसर्ग। वे किसी भी तरह से असंबंधित हैं। –

+2

यह उन तीनों का एकमात्र उत्तर है जो वास्तव में प्रश्न @ मैट में गलतफहमी को संबोधित करते हैं। अन्य दो सिर्फ '@ सिंक्रनाइज़() ' –