这两者功能上讲同属于弱引用,指向对象但不能持有对象实例,但是在对象的销毁处理中有区别。
弱引用的意义在于能够避免因为强引用对象互相引用带来的内存泄漏问题。
_weak与_unsafe_unretained两者的区别:
当_unsafe_unretained指向的对象被销毁后,该指针仍然指向该对象之前的地址,变为野指针。
而_weak则会置空为nil。
那么为什么_unsafe_unretained仍需要使用:
1._weak需要检查对象是否被释放,所有需要追踪一些信息。
2.如果一个对象拥有大量的弱引用,当它被废弃时就需要遍历_weak表,将表中的指针置空。
简单说就是在相同情况下,_weak的性能开销比较大。
_unsafe_unretained较_weak的速度比较快,但在对象生命周期不确定的情况下有崩溃风险。
故当对象声明周期明确时,_unsafe_unretained是更有效的方式。