嚴(yán)格單例模式
繼承自 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
}
override func mutableCopy() -> Any {
return self // SingletonClass.shared
}
// Optional
func reset() {
// Reset all properties to default value
}
}
靜態(tài)屬性 shared 持有唯一的實例债鸡,對外公開。
重載 init() 方法铛纬,使其對外不可見厌均,不可以在外部調(diào)用,防止在外部創(chuàng)建實例告唆。
重載 copy()棺弊、mutableCopy() 方法,返回 self擒悬,防止在外部復(fù)制實例模她。這里也可以返回 SingletonClass.shared,效果是一樣的懂牧,因為只有一個實例侈净。只有 shared 能調(diào)用 copy()、mutableCopy() 方法,那么 self 就是 shared畜侦。寫 self元扔,代碼比較簡潔。
單例一旦創(chuàng)建夏伊,一直持有摇展,不能手動銷毀,但可以重置數(shù)據(jù)溺忧。如果需要的話咏连,可以添加一個重置數(shù)據(jù)的方法 reset()。例如鲁森,當(dāng)前用戶退出登錄祟滴,需要把當(dāng)前用戶實例的所有屬性重置為默認(rèn)值,防止數(shù)據(jù)錯誤歌溉。
不繼承自 NSObject
class SingletonClass2 {
static let shared = SingletonClass2()
// Make sure the class has only one instance
// Should not init outside
private init() {}
// Optional
func reset() {
// Reset all properties to default value
}
}
不繼承自 NSObject 的類沒有 copy()垄懂、mutableCopy() 方法,不需要重載痛垛。