本文源自Swift中文网:http://see.xidian.edu.cn/cpp/swift/
Swift提供两种方法来解决强引用环:弱引用和无主引用。
弱引用和无主引用允许引用环中的一个实例引用另外一个实例,但不是强引用。因此实例可以互相引用但是不会产生强引用环。
对于生命周期中引用会变为nil的实例,使用弱引用;对于初始化时赋值之后引用再也不会赋值为nil的实例,使用无主引用。
弱引用
弱引用不会增加实例的引用计数,因此不会阻止ARC销毁被引用的实例。这种特性使得引用不会变成强引用环。声明属性或者变量的时候,关键字weak表明引用为弱引用。完整版请查看:http://see.xidian.edu.cn/cpp/html/2283.html
在实例的生命周期中,如果某些时候引用没有值,那么弱引用可以阻止强引用环。如果整个生命周期内引用都有值,那么相应的用无主引用,在无主引用这一章中有详细描述。在上面的Apartment例子中,有时一个Apartment实例可能没有房客,因此此处应该用弱引用。
时间: 2024-10-08 01:50:14