Objective c @synchronized节中声明的块是否已同步?
在实现lazy thread safe getter时,我遇到了一个有趣的情况(在我看来),我必须使用Objective c @synchronized节中声明的块是否已同步?,objective-c,objective-c-blocks,synchronized,Objective C,Objective C Blocks,Synchronized,在实现lazy thread safe getter时,我遇到了一个有趣的情况(在我看来),我必须使用@synchronized节,在该节中声明并调用块。以下是代码的简化版本: - (void) someMethod { @synchronized(self) { [self doSomethingWithCompletionBlock:^{ // Are we synchronized here? }]; } } 我们是
@synchronized
节,在该节中声明并调用块。以下是代码的简化版本:
- (void) someMethod
{
@synchronized(self) {
[self doSomethingWithCompletionBlock:^{
// Are we synchronized here?
}];
}
}
我们是否在区块内(自行)同步?如果是,块是否捕获(在内存管理方面)自指针?块本身将不同步 但是,如果在同一线程上同步执行此块,则它仍将在现有同步块内运行 如果将块传递给另一个线程,它将不再同步