2009-08-14 4 views
17

Objective-C에서 @synchronized 구문을 사용하여 일부 개체에서 블록을 동기화하도록 선언 할 수 있습니다. 그것은 다음과 같이 보일 것입니다 :@ 정적 메서드에서 동기화 됨

@synchronized (self) { 
    // Do something useful 
} 

그러나, 나는 정확히 self 당신이 (+ 대신 -의) 정적 메서드가있는 경우를 참조 무엇 궁금합니다. 나는 Apple 문서를 살펴 보았는데, 괜찮다고 말했지만 실제로 설명하지는 마라. 나는 그것이 효과가 있다는 것을 안다, 나는 그것이 단지 그것이 무엇을 의미하는지 궁금하다.

답변

26

self 클래스 (정적) 메소드의 내부는 클래스 객체를 참조합니다.

+0

감사합니다. 내가 잃어버린 간단한 것이 있다는 것을 나는 안다. – Itay

+4

클래스 메서드에서 @synchronized (self)는 하위 클래스 self가 다른 개체 (클래스)이므로 위험 할 수 있으므로 두 클래스 간의 메서드에 동시 액세스 할 수 있으므로주의해야합니다. –

13

In Objective-C self은 상황에 따라 결정됩니다. 인스턴스 메소드에서 호출되는 인스턴스가됩니다. 정적 메서드에서는 클래스 개체 자체가됩니다 (즉, 인스턴스 메서드에서 [self class]의 결과)

0

위의 대답을 통해 하나의 스레드가 @synchronized (self)를 사용하여 인스턴스 메서드를 호출하면, , 또 다른 스레드가 @synchronized (self)를 사용하여 클래스 메서드를 호출하면 동기화를 위해 다른 객체를 사용하기 때문에 두 호출간에 동기화가 발생하지 않습니다.

관련 문제