从objective-c中的@synchronized块内部返回

Vas*_*lis 28 objective-c synchronized thread-safety

可能有人告诉我是否可以从一个@synchronized街区内返回?

例如:

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

             if(!bDoIt) return nil;
             ...
        }
    }
Run Code Online (Sandbox Code Playgroud)

或者我应该先解锁块(使用NSLock代替)?

小智 31

@synchronized当你返回时会自动删除它的异常处理上下文,并放弃锁定.所以你写的代码很好.

  • +1值得一提的是,这几乎是*为什么*`@ synchronized`存在 - 它让你不必手动放弃你自己的任何锁(它可以像多个代码路径一样使用意大利面条). (7认同)
  • 从不再存在的用户那里得到27票的答案很好但是很高兴有链接到一些权威来源. (2认同)