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