1. 程式人生 > >Swift unowned和weak的區別

Swift unowned和weak的區別

1. unowned和weak的相同點

unowned和weak均為避免出現迴圈引用

2. unowned和weak的差異

unowned

unowned要求被捕獲的變數不能為nil,所以在closure中使用[unowned self] 必須保證self不能為空,所以當self被釋放後再執行closure會導致程式崩潰。

weak

weak允許被捕獲的值為可選型,即可以被捕獲的值為nil,當使用[weak self]時需要進行對self進行解包。或者使用

guard let strongSelf = self else { return }