2014-07-24 3 views
1

게으른 스레드 안전 getter를 구현하는 동안 흥미로운 (필자 의견으로는) @synchronized 섹션을 선언하고이 섹션 내부를 호출해야하는 상황이 발생했습니다. 다음은 코드의 단순화 된 버전입니다.@synchronized 섹션에서 선언 된 블록이 동기화됩니까?

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

블록 내부에서 동기화됩니까? 그렇다면 블록은 (메모리 관리 측면에서) 자체 포인터를 캡처합니까?

답변

2

블록 자체가 동기화되지 않습니다.

그러나 동일한 스레드에서이 블록을 동 기적으로 실행하면 기존의 동기화 된 블록 내에서 계속 실행됩니다.

OTOH를 사용하면 블록을 다른 스레드로 전달할 때 더 이상 동기화되지 않습니다.