2010-12-27 12 views
24

में @ सिंक्रनाइज़ किए गए ब्लॉक के अंदर से वापस आना कोई मुझे बता सकता है कि @synchronized ब्लॉक के अंदर से वापस लौटना ठीक है या नहीं?उद्देश्य-सी

उदाहरण के लिए:

- (id)methodThatReturnsSomething:(BOOL)bDoIt 
    { 
     @synchronized(self) {  

      if(!bDoIt) return nil; 
      ... 
     } 
    } 

या मैं पहले खंड अनलॉक (बजाय NSLock का प्रयोग करके) करना चाहिए?

+0

संभावित डुप्लिकेट [@ सिंक्रनाइज़ किए गए ब्लॉक के अंदर विधि से लौटने] [http://stackoverflow.com/questions/2704400/returning-from-method-inside-a-synchronized-block) –

उत्तर

28

@synchronized लॉक होने पर स्वचालित रूप से अपवाद-हैंडलिंग संदर्भ ले जाएगा, और लॉक को छोड़ देगा। तो आपके द्वारा लिखा गया कोड ठीक है।

+0

मैंने इसे ठीक किया है! आपके उत्तर के लिए धन्यवाद! – Vassilis

+6

+1 यह उल्लेखनीय है कि यह बहुत अधिक है * क्यों * '@ सिंक्रनाइज़ किया गया है '- यह आपको अपने आप से किसी भी ताले को मैन्युअल रूप से छोड़ने के लिए राहत देता है (जो कई कोड पथों के साथ काफी स्पेगेटी-जैसे प्राप्त कर सकता है)। –

+2

अब मौजूदा उपयोगकर्ता से 27 वोटों के साथ उत्तर अच्छा नहीं है, हालांकि कुछ आधिकारिक स्रोतों के लिंक होना अच्छा लगेगा। –