1. 程式人生 > >Swift-weak & unowned

Swift-weak & unowned

Swift-weak & unowned

感謝喵神的《100個Swift開發必備 Tip》內容參考自 “Tip46 記憶體管理,weak和unowned”

weak

  • weak在引用的內容被釋放後,標記為weak的成員將會自動變成nil(因此被標記為@weak的變數一定是Optional值)

unowned

  • unowned像OC裡面的 unsafe_unretained,unowned設定以後 即使它原來引用的內容已經被釋放了,它仍然會保持對被已經釋放的物件一個“無效的”引用,它不能是Optional值,也不會被指向nil。如果你嘗試呼叫這個引用的方法或者成員屬性時,就會崩潰。

如何選擇?

  • 如果能夠確定在訪問時不會已經被釋放的話,就儘量使用unowned
  • 如果存在被釋放的可能,就選擇weak