標籤:
網上已經有方法了,我這裡就是抄了下,原文連結
http://bj007.blog.51cto.com/1701577/649413
http://blog.csdn.net/u010124617/article/details/28856711?utm_source=tuicool
這裡的dispatch_once_t就是一個用於標記的整型,沒什麼特殊之處。
用dispatch_once實現單例的最大好處就是安全執行緒!!這個經常會被面試問到,建立資料庫和網路操作的單例時,確實存線上程安全問題。
先看oc的
+ (AccountManager *)sharedManager { static AccountManager *sharedAccountManagerInstance = nil; static dispatch_once_t predicate; dispatch_once(&predicate, ^{ sharedAccountManagerInstance = [[self alloc] init]; }); return sharedAccountManagerInstance; }
再看swfit的,這裡使用了內部的struct是因為目前swift的class中不支援static定義類屬性。
class SwiftSingleton{ class func shareInstance()->SwiftSingleton{ struct YRSingleton{ static var predicate:dispatch_once_t = 0 static var instance:SwiftSingleton? = nil } dispatch_once(&YRSingleton.predicate,{ YRSingleton.instance=SwiftSingleton() } ) return YRSingleton.instance! }}
ios oc 和 swfit 用dispatch_once 建立單例