本文的單例模式分為嚴格單例模式和不嚴格單例模式。單例模式要求一個類有一個實例,有公開接口可以訪問這個實例。嚴格單例模式,要求一個類只有一個實例;不嚴格單例模式,可以創(chuàng)建多個實例。
有的類只能有一個實例,例如 UIApplication,通過 shared 屬性訪問唯一的實例,屬于嚴格單例模式。有用戶登錄功能的 App 中,如果當前用戶的數(shù)據(jù)模型與其他用戶的數(shù)據(jù)模型不同,那么當前用戶的類也應(yīng)該用嚴格單例模式。在邏輯上,當前用戶只有一個,只能有一個實例;這樣可以在各個地方訪問當前用戶的數(shù)據(jù)。如果當前用戶的數(shù)據(jù)模型與其他用戶的數(shù)據(jù)模型相同,則應(yīng)用不嚴格單例模式??梢越o其他用戶創(chuàng)建實例,同時也可以在各個地方訪問當前用戶的數(shù)據(jù)。
Swift 實現(xiàn)
嚴格單例模式
大多數(shù) Objective-C 的類都繼承自 NSObject,而 Swift 的類可以繼承自 NSObject 或者不繼承。
繼承自 NSObject
class SingletonClass: NSObject { static let shared = SingletonClass() // Make sure the class has only one instance // Should not init or copy outside private override init() {} override func copy() -> Any { return self // SingletonClass.shared }