2010-12-27 4 views
24

Может кто-нибудь сказать мне, нормально ли возвращаться изнутри блока @synchronized?возврат изнутри @синхронизированного блока в объекте-c

Например:

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

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

или я должен разблокировать блок первого (с использованием NSLock вместо этого)?

+0

Возможный дубликат [Возврат из метода внутри блока @synchronized] (http://stackoverflow.com/questions/2704400/returning-from-method-inside-a-synchronized-block) –

ответ

28

@synchronized автоматически отменяет свой контекст обработки исключений при возврате и отказывается от блокировки. Таким образом, код, который вы написали, в порядке.

+0

Я исправил это! Спасибо за ваш ответ! – Vassilis

+6

+1 Стоит упомянуть, что это в значительной степени * почему * '@ synchronized' существует - это избавляет вас от необходимости вручную отказываться от любых ваших собственных замков (которые могут получить довольно спагетти, как с несколькими кодами). –

+2

Ответа на этот вопрос 27 голосов от уже не существующего пользователя, но было бы неплохо иметь ссылки на некоторые авторитетные источники. –

 Смежные вопросы

  • Нет связанных вопросов^_^