懶加載
在 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 ?? "") }()