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

結構體和類

5.5 閉包和可變性

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

默認狀況下結構體會存儲在堆上,但絕大多數時候swift會對其優化,把結構體存儲到棧上。 若是結構體的變量被一個函數閉合(內部使用)了,這個結構體就會存放在堆上。 結構體太大也會被存在堆上git

5.6 內存 (這一節主要講循環引用相關的)


知識點: 標準庫中大部分是結構體或者枚舉。由於只有一個持有者。通常狀況下是不用考慮循環引用的

weak 引用


這裏就講了一些循環引用的基本知識點,我相信你們都明明白白的,不贅述。github

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

在閉包中的使用方法

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

unowned 引用


做用:不持有引用對象,但這個屬性會一直有效有效(意思就是unowned 修飾的屬性必定要是不爲nil的)

若是確實必定有值,這個屬性就不該該是可選值,這個時候能夠用unowned關鍵字。swift

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

tips:


實際項目中若是對unowned 和weak 拿捏的不太準的話鼎力推薦使用weak !!! 我以前項目中一直的一個崩潰就是 用[unwoned self] 修飾self 但self可能爲nil。 致使直接崩潰。閉包

文章源文件地址函數

相關文章
相關標籤/搜索