2009-08-14 13 views
17

उद्देश्य-सी में सिंक्रनाइज़, आप @synchronized निर्माण का उपयोग कर किसी ऑब्जेक्ट पर सिंक्रनाइज़ होने के रूप में एक ब्लॉक घोषित कर सकते हैं। यह कुछ इस तरह दिखेगा:@ एक स्थिर विधि

@synchronized (self) { 
    // Do something useful 
} 

हालांकि, मैं उत्सुक वास्तव में क्या self आप एक स्थिर विधि (- की + बजाय) हैं तो करने के लिए बात कर रहा है कर रहा हूँ। मैंने ऐप्पल दस्तावेज़ों को देखने की कोशिश की, और वे इसे ठीक होने का संकेत देते हैं, लेकिन वास्तव में इसे समझाते नहीं हैं। मुझे पता है कि यह काम करता है, मैं सिर्फ उत्सुक हूं इसका मतलब क्या है।

उत्तर

26

self कक्षा (स्थिर) विधि के अंदर कक्षा वस्तु को संदर्भित करता है।

+0

धन्यवाद। मुझे पता है कि कुछ आसान था जो मैं लापता था। – Itay

+4

सावधान रहें कि एक वर्ग विधि में @ सिंक्रनाइज़ (स्वयं) खतरनाक हो सकता है क्योंकि उप-वर्ग स्वयं के लिए एक अलग वस्तु (वर्ग) है, इसलिए अभी भी उन दो वर्गों के बीच विधि के साथ समवर्ती पहुंच हो सकती है –

13

उद्देश्य-सी self संदर्भ में निर्धारित किया जाता है। एक उदाहरण विधि में, यह उदाहरण कहा जा रहा है। एक स्थिर विधि में, यह क्लास ऑब्जेक्ट (यानी [self class] का परिणाम उदाहरण विधि में)

0

उपर्युक्त उत्तरों के साथ, बस ध्यान रखें कि यदि एक थ्रेड @synchronized (self) का उपयोग करके एक इंस्टेंस विधि को कॉल करता है , और एक और धागा @ सिंक्रनाइज़ (स्वयं) का उपयोग करके कक्षा विधि को कॉल करता है, दो कॉल के बीच कोई सिंक्रनाइज़ेशन नहीं होगा, क्योंकि वे सिंक्रनाइज़ेशन के लिए अलग-अलग ऑब्जेक्ट्स का उपयोग कर रहे हैं।