標籤:
懶載入
在 iOS 開發中,懶載入是無處不在的
lazy var person: Person = { print("懶載入") return Person()}()
- 懶載入本質上是一個閉包
- 以上代碼可以改寫為以下格式
let personFunc = { () -> Person in print("懶載入") return Person()}lazy var demoPerson: Person = self.personFunc()
lazy var demoPerson: Person = Person()
唯讀屬性getter & setter
- 在 Swift 中
getter & setter
很少用,以下代碼僅供瞭解
private var _name: String?var name: String? { get { return _name } set { _name = newValue }}
儲存型屬性 & 計算型屬性
- 儲存型屬性 - 需要開闢空間,以儲存資料
- 計算型屬性 - 執行函數返回其他記憶體位址
var title: String { get { return "Mr " + (name ?? "") }}
- 只實現 getter 方法的屬性被稱為計算型屬性,等同於 OC 中的 ReadOnly 屬性
- 計算型屬性本身不佔用記憶體空間
- 不可以給計算型屬性設定數值
- 計算型屬性可以使用以下代碼簡寫
var title: String { return "Mr " + (name ?? "")}
計算型屬性與懶載入的對比
- 計算型屬性
- 不分配獨立的儲存空間儲存計算結果
- 每次調用時都會被執行
- 更像一個函數,不過不能接收參數,同時必須有傳回值
var title2: String { return "Mr" + (name ?? "")}
- 懶載入屬性
- 在第一次調用時,執行閉包並且分配空間儲存閉包返回的數值
- 會分配獨立的儲存空間
- 與 OC 不同的是,lazy 屬性即使被設定為 nil 也不會被再次調用
lazy var title: String = { return "Mr " + (self.name ?? "")}()
Swift的懶載入和唯讀屬性的介紹