OC内存管理: _weak与_unsafe_unretained的区别

这两者功能上讲同属于弱引用,指向对象但不能持有对象实例,但是在对象的销毁处理中有区别。

弱引用的意义在于能够避免因为强引用对象互相引用带来的内存泄漏问题。

_weak与_unsafe_unretained两者的区别:

当_unsafe_unretained指向的对象被销毁后,该指针仍然指向该对象之前的地址,变为野指针。

而_weak则会置空为nil。

那么为什么_unsafe_unretained仍需要使用:

1._weak需要检查对象是否被释放,所有需要追踪一些信息。

2.如果一个对象拥有大量的弱引用,当它被废弃时就需要遍历_weak表,将表中的指针置空。

简单说就是在相同情况下,_weak的性能开销比较大。

_unsafe_unretained较_weak的速度比较快,但在对象生命周期不确定的情况下有崩溃风险。

故当对象声明周期明确时,_unsafe_unretained是更有效的方式。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容