Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c @synchronized节中声明的块是否已同步?_Objective C_Objective C Blocks_Synchronized - Fatal编程技术网

Objective c @synchronized节中声明的块是否已同步?

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? }]; } } 我们是

在实现lazy thread safe getter时,我遇到了一个有趣的情况(在我看来),我必须使用
@synchronized
节,在该节中声明并调用块。以下是代码的简化版本:

- (void) someMethod
{
    @synchronized(self) {
        [self doSomethingWithCompletionBlock:^{
            // Are we synchronized here?
        }];
    }
}

我们是否在区块内(自行)同步?如果是,块是否捕获(在内存管理方面)自指针?

块本身将不同步

但是,如果在同一线程上同步执行此块,则它仍将在现有同步块内运行

如果将块传递给另一个线程,它将不再同步