結構體和類
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。
導致直接崩潰。