Swift中延遲屬性 lazy

2021-07-08 18:27:21 字數 1299 閱讀 1011

延遲儲存屬性是指當第一次被呼叫的時候才會計算其初始值的屬性。在屬性宣告前使用@lazy來標示乙個延遲儲存屬性。

注意:必須將延遲儲存屬性宣告成變數(使用var關鍵字),因為屬性的值在例項構造完成之前可能無法得到。而常量屬性在構造過程完成之前必須要有初始值,因此無法宣告成延遲屬性。

延遲屬性很有用,當屬性的值依賴於在例項的構造過程結束前無法知道具體值的外部因素時,或者當屬性的值需要複雜或大量計算時,可以只在需要的時候來計算它。

下面的例子使用了延遲儲存屬性來避免複雜類的不必要的初始化。例子中定義了dataimporterdatamanager兩個類,下面是部分**:

class dataimporter 

class datamanager

let manager = datamanager()

manager.data += "some data"

manager.data += "some more data"

// dataimporter 例項的 importer 屬性還沒有被建立

datamanager類包含乙個名為data的儲存屬性,初始值是乙個空的字串(string)陣列。雖然沒有寫出全部**,datamanager類的目的是管理和提供對這個字串陣列的訪問。

datamanager的乙個功能是從檔案匯入資料,該功能由dataimporter類提供,dataimporter需要消耗不少時間完成初始化:因為它的例項在初始化時可能要開啟檔案,還要讀取檔案內容到記憶體。

datamanager也可能不從檔案中匯入資料。所以當datamanager的例項被建立時,沒必要建立乙個dataimporter的例項,更明智的是當用到dataimporter的時候才去建立它。

由於使用了@lazyimporter屬性只有在第一次被訪問的時候才被建立。比如訪問它的屬性filename時:

println(manager.importer.filename)

// dataimporter 例項的 importer 屬性現在被建立了

// 輸出 "data.txt」

Swift 延遲屬性 lazy

慣例先看 class closerange print no lazy load return res 懶載入 lazy var sum int print lazy load return res init start int,end int var range closerange start ...

Hibernate 的延遲載入 lazy 屬性

感覺下面的這篇文章還不錯。不過還是有點問題。如 lazy true fetch join 這些。明顯記得這樣設定lazy會失效的,無法做到延遲載入。one to one 預設情況下,對主物件的查詢,不會使用懶載入,直接的就通過 左外連線 left outer join 關聯查詢,把從物件的資訊一併拿...

C 延遲執行 Lazy

在.net4.0中,可以使用lazy來實現物件的延遲初始化,提供了執行緒安全的延遲呼叫,從而優化系統的效能。延遲初始化就是將物件的初始化延遲到第一次使用該物件時。延遲初始化是我們在寫程式時經常會遇到的情形,例如建立某一物件時需要花費很大的開銷,而這一物件在系統的執行過程中不一定會用到,這時就可以使用...