2013-04-15 4 views
1

코드 덩어리를 참조하십시오. 클래스 메소드입니다. 어느 누구도이 방법에 대해 설명 할 수 있습니까? 그것은 무엇을 했습니까?아무도이 코드 조각을 이해할 수 있습니까?

+ (PeriodicElements *)sharedPeriodicElements { 
    @synchronized(self) { 
    static dispatch_once_t pred; 
    dispatch_once(&pred, ^{ sharedPeriodicElementsInstance = [[self alloc] init]; }); 
    } 
    return sharedPeriodicElementsInstance; 
} 
+1

코드 :

+ (PeriodicElements *)sharedInstance { static PeriodicElements *sharedPeriodicElementsInstance; @synchronized(self) { if (sharedPeriodicElementsInstance == nil) { sharedPeriodicElementsInstance = [[PeriodicElements alloc] init]; } } return sharedPeriodicElementsInstance; } 

이 (들으 @bbum) 명확하게하려면, 이것은 당신이 실행해야하는지 정말 스레드를 안전하게 만들고 dispatch_once GCD를 사용하십시오. 이 두 가지 용어를 찾으십시오. –

+0

Thanks Anoop Vaidya :) – chinabenjamin66

+1

스레드를 안전하게 만드는 코드가 잘못되었습니다. 부정확 한 동안, 그것은 작동한다. 그러나 나머지 코드베이스의 품질에 관해서는 의문을 제기합니다. – bbum

답변

3

싱글 톤을 만드는 데 사용됩니다. dispatch_once은 몇 번이나 sharedPeriodicElements을 호출해도 초기화 도구는 앱의 전체 수명 동안 한 번만 호출됩니다.

dispatch_once은 이미 스레드로부터 안전하기 때문에 블록이 다소 과장되었습니다. 것 같은데 당신이하고 싱글의 옛날 방식의 부분적으로 변이 된 버전을보고있는 것처럼 :

+(PeriodicElements *)sharedPeriodicElements { 
    static dispatch_once_t pred; 
    dispatch_once(&pred, ^{ sharedPeriodicElementsInstance = [[self alloc] init]; }); 
    return sharedPeriodicElementsInstance; 
} 
+0

예, iOS 개발 센터에서 다운로드 한 샘플 프로젝트를 배우고 있습니다. 감사합니다. mprivet – chinabenjamin66

+0

명확히 말하면 @synchronized가없는'dispatch_once' 패턴은 사용할 것입니다. – bbum

관련 문제