2010-12-27 5 views
24

Qualcuno può dirmi se è possibile tornare dall'interno di un blocco @synchronized?ritorno dall'interno di un blocco @synchronized nell'obiettivo-c

Ad esempio:

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

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

o dovrei sbloccare il primo blocco (utilizzando NSLock invece)?

+0

Possibile duplicato di [Ritorno dal metodo all'interno di un blocco @synchronized] (http://stackoverflow.com/questions/2704400/returning-from-method-inside-a-synchronized-block) –

risposta

28

@synchronized interromperà automaticamente il contesto di gestione delle eccezioni quando si ritorna e si abbandona il blocco. Quindi il codice che hai scritto va bene.

+0

Ho risolto il problema! La ringrazio per la risposta! – Vassilis

+6

+1 Vale la pena ricordare che questo è più o meno il motivo per cui * esiste '' sincronizzato' - che allevia il dover abbandonare manualmente ogni blocco (che può diventare piuttosto simile a spaghetti con più percorsi di codice). –

+2

La risposta con 27 voti da un utente non più esistente è buona, tuttavia sarebbe bello avere i collegamenti ad alcune fonti autorevoli. –