@synchronized() 這個主要是考慮多線程的程序,這個指令能夠將{ } 內的代碼限制在一個線程執行,若是當前線程沒有執行完,其餘的線程須要執行就得等着。objective-c
@synchronized 的做用是建立一個互斥鎖,保證此時沒有其它線程對self對象進行修改。這個是objective-c的一個鎖定令牌,防止self對象在同一時間內被其它線程訪問,起到線程的保護做用。 通常在公用變量的時候使用,如單例模式或者操做類的static變量中使用。編程
指令@synchronized()須要一個參數。該參數能夠使任何的Objective-C對象,包括self。這個對象就是互斥信號量。他可以讓一個線程對一段代碼進行保護,避免別的線程執行該段代碼。針對程序中的不一樣的關鍵代碼段,咱們應該分別使用不一樣的信號量。只有在應用程序編程執行多線程以前就建立好全部須要的互斥信號量對象來避免線程間的競爭纔是最安全的。安全
例1:使用self做爲互斥信號量來實現當前對象對實例方法訪問的同步多線程
-(void)start { @synchronized(self) { //關鍵代碼; } }
例2:使用自定義的信號量來對方法加鎖線程
- (void)start { OraCardManager *cardManager = [[OraCardManager alloc] init]; @synchronized (cardManager) { //關鍵代碼; } }