默認狀況下結構體會存儲在堆上
,但絕大多數時候swift會對其優化
,把結構體存儲到棧上
。 若是結構體的變量被一個函數閉合(內部使用)
了,這個結構體就會存放在堆上
。 結構體太大
也會被存在堆上
git
這裏就講了一些循環引用的基本知識點,我相信你們都明明白白的,不贅述。github
///當閉包沒有參數時 不要下面的 para
closure = {[weak self] para in
self?.func()
}
複製代碼
不持有
引用對象,但這個屬性會一直有效有效(意思就是unowned 修飾的屬性必定要是不爲nil的)若是確實必定有值,這個屬性就不該該是可選值,這個時候能夠用unowned關鍵字。swift
實際項目中若是對unowned 和weak 拿捏的不太準的話鼎力推薦使用weak !!!
我以前項目中一直的一個崩潰就是 用[unwoned self] 修飾self 但self可能爲nil。
致使直接崩潰。閉包
文章源文件地址函數