《從零開始學(xué)Swift》學(xué)習(xí)筆記(Day 63)——Cocoa Touch設(shè)計(jì)模式及應(yīng)用之單例模式
原創(chuàng)文章袒哥,歡迎轉(zhuǎn)載堡称。轉(zhuǎn)載請注明:關(guān)東升的博客
什么是設(shè)計(jì)模式艺演。設(shè)計(jì)模式是在特定場景下對特定問題的解決方案,這些解決方案是經(jīng)過反復(fù)論證和測試總結(jié)出來的晓殊。實(shí)際上伤提,除了軟件設(shè)計(jì),設(shè)計(jì)模式也被廣泛應(yīng)用于其他領(lǐng)域,比如UI設(shè)計(jì)和建筑設(shè)計(jì)等次伶。
下面來介紹Cocoa Touch框架中的設(shè)計(jì)模式中的單例模式稽穆。
單例模式
單例模式的作用是解決“應(yīng)用中只有一個實(shí)例”的一類問題。在Cocoa Touch框架中舌镶,有UIApplication柱彻、NSUserDefaults和NSNotificationCenter等單例類哟楷。另外卖擅,NSFileManager和NSBundle類雖然屬于Cocoa框架的內(nèi)容,但也可以在Cocoa Touch框架中使用(Cocoa框架中的單例類有NSFileManager挎狸、NSWorkspace和NSApplication等)断楷。
問題提出
在一個應(yīng)用程序的生命周期中,有時候只需要某個類的一個實(shí)例恐锣。例如:當(dāng)iOS應(yīng)用程序啟動時账千,應(yīng)用的狀態(tài)由UIApplication類的一個實(shí)例維護(hù)侥蒙,這個實(shí)例代表了整個“應(yīng)用程序?qū)ο蟆保荒苁且粋€實(shí)例匀奏,其作用是共享應(yīng)用程序中的一些資源鞭衩、控制應(yīng)用程序的訪問,以及保持應(yīng)用程序的狀態(tài)等娃善。
解決方案
單例模式的實(shí)現(xiàn)有很多方案论衍,蘋果公司在《Using Swift with Cocoa and Objective-C》官方文檔中給出了一種單例模式的實(shí)現(xiàn)。最簡單形式代碼如下:
class Singleton {
static let sharedInstance = Singleton()
}
上述代碼采用static的類屬性實(shí)現(xiàn)單例模式聚磺,這種類屬性只被延遲加載執(zhí)行一次坯台,即便是在多線程情況下也只是執(zhí)行一次,并且保證是線程安全的瘫寝。
如果需要進(jìn)行一些初始化蜒蕾,可以使用如下帶有閉包形式代碼:
class Singleton {
static let sharedInstance: Singleton = {
let instance = Singleton()
// 初始化處理
return instance
}()
}
單例模式除了上述蘋果官方給出的實(shí)現(xiàn)外,還有很多種實(shí)現(xiàn)方式焕阿。