保證乙個類公有乙個例項,並提供乙個訪問它的全域性訪問點。
1、使用場景
2、實現的重要三個步驟
swift語言不支援變數及方法的許可權,沒有辦法隱藏變數及方法,可以隨意直接建立乙個例項。單例的建立有很多寫法,swift支援只有struct支援靜態變數,class不支援靜態變數,所以很容易想到,在類的內部使用struct就能解決引用的儲存問題,**如下:
class swiftsingleton
return inner.instance!
}struct inner
}
執行如下測試**,進行簡單測試:
class swiftsingletontest: xctestcase
}
執行結果,左側綠色對號代表執行通過:
其中===在swift中代表「等價於」,比較的是兩個變數或者常量的引用位址,只能用於class的比較
在swift中static型別變數會自動實現成延遲載入模式,也可以更簡單的實現成如下:
class swiftsingleton
struct inner
}
在所有語言中單例分為懶漢模式(延遲載入),餓漢模式,一般為了避免資源浪費,都喜歡實現成懶漢模式,即使用時在生成例項。在swift語言中,由於static關鍵字做了優化,自動實現了 延遲載入模式,所以上面的**實現的是懶漢模式而並非餓漢模式
class與struct乙個非常重要的區別:
class:傳引用
struct:傳值
有部分人可能想通過struct來直接實現單例模式,由於struct傳遞時是傳的值,會造成記憶體中有多個拷貝,測試如下:
struct swiftsingleton
var single1 = swiftsingleton.shared
var single2 = swiftsingleton.shared
single2.name = "2"
println("------->\(single1.name)")
println("------->\(single2.name)")
列印結果如下:
------->1
------->2
program ended with exit code: 0
從上面可以看到,通過struct下的實現,我們不能保證有且僅有乙個例項,這種實現方式是有問題的 Swift之單例模式
單例特點 單例的構造器必須為private 單例例項必須為執行緒安全的。單例優點 class caculaterectanglearea static func getrectanglearea x int,y int void caculaterectanglearea getrectanglea...
Swift單例模式
大概分兩種 1.繼承自 nsobject的 class singletonclass nsobject override func copy any return self singletonclass.shared override func mutablecopy any return self...
設計模式之 單例設計模式
單例設計模式 單例設計模式概述 單例模式就是要確保類在記憶體中只有乙個物件,該例項必須自動建立,並且對外提供。優點 在系統記憶體中只存在乙個物件,因此可以節約系統資源,對於一些需要頻繁建立和銷毀的物件單例模式無疑可以提高系統的效能。缺點 沒有抽象層,因此擴充套件很難。職責過重,在一定程式上違背了單一...