[swift 進階]讀書筆記-第五章:結構體和類 C5P5_閉包和可變性

liaoWorking在掘金發表於2019-01-04

結構體和類

5.5 閉包和可變性

知識點:結構體的儲存位置。

預設情況下結構體會儲存在堆上,但絕大多數時候swift會對其優化,把結構體儲存到棧上。 如果結構體的變數被一個函式閉合(內部使用)了,這個結構體就會存放在堆上。 結構體太大也會被存在堆上

5.6 記憶體 (這一節主要講迴圈引用相關的)


知識點: 標準庫中大部分是結構體或者列舉。因為只有一個持有者。一般情況下是不用考慮迴圈引用的

weak 引用


這裡就講了一些迴圈引用的基本知識點,我相信大家都明明白白的,不贅述。

知識點: delegate 用 weak關鍵字修飾(同OC)

在閉包中的使用方法

///當閉包沒有引數時 不要下面的 para 
closure = {[weak self] para in
 self?.func()
}
複製程式碼

unowned 引用


作用:不持有引用物件,但這個屬性會一直有效有效(意思就是unowned 修飾的屬性一定要是不為nil的)

如果確實一定有值,這個屬性就不應該是可選值,這個時候可以用unowned關鍵字。

在閉包中的使用:同weak關鍵字 但self```可能不是非必選``的。

tips:


實際專案中如果對unowned 和weak 拿捏的不太準的話鼎力推薦使用weak !!! 我之前專案中一直的一個崩潰就是 用[unwoned self] 修飾self 但self可能為nil。 導致直接崩潰。

文章原始檔地址

相關文章