2013-04-15 170 views
1

查看代碼塊,它是一個類方法。任何人都可以給我一些這種方法的解釋嗎?它做了什麼?任何人都可以幫助我理解這段代碼嗎?

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

代碼使其線程安全,並使用dispatch_once GCD。搜索這兩個術語:) –

+0

感謝Anoop Vaidya :) – chinabenjamin66

+1

不正確的代碼,以使線程安全的東西,在那。雖然不正確,但它工作。但它確實引起了關於其他代碼庫質量的問題。 – bbum

回答

3

它用來創建一個單身人士。 dispatch_once將確保無論您致電sharedPeriodicElements多少次,初始化程序將只在您的應用程序的整個生命週期內被調用一次。

​​塊雖然有點過分,但因爲dispatch_once已經線程安全。好像你正在看的做單身的老辦法部分突變版本:

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

要清楚(THX @bbum),這實在是什麼,你應該運行:

+(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

相關問題