這兩者功能上講同屬于弱引用,指向?qū)ο蟮荒艹钟袑ο髮嵗?,但是在對象的銷毀處理中有區(qū)別。
弱引用的意義在于能夠避免因為強引用對象互相引用帶來的內(nèi)存泄漏問題。
_weak與_unsafe_unretained兩者的區(qū)別:
當(dāng)_unsafe_unretained指向的對象被銷毀后,該指針仍然指向該對象之前的地址,變?yōu)橐爸羔槨?/p>
而_weak則會置空為nil。
那么為什么_unsafe_unretained仍需要使用:
1._weak需要檢查對象是否被釋放,所有需要追蹤一些信息。
2.如果一個對象擁有大量的弱引用,當(dāng)它被廢棄時就需要遍歷_weak表,將表中的指針置空。
簡單說就是在相同情況下,_weak的性能開銷比較大。
_unsafe_unretained較_weak的速度比較快,但在對象生命周期不確定的情況下有崩潰風(fēng)險。
故當(dāng)對象聲明周期明確時,_unsafe_unretained是更有效的方式。