Swift中的弱者与无人者简介

我可以肯定,我们许多用Swift进行编码的人经常会看到两个我们熟悉的weakunowned关键字。 今天,我想讨论两个关键字之间的区别以及如何在应用程序中实现它。

为了讨论weakunowned ,我们需要首先了解ARC(自动引用计数)。 ARC用于跟踪和管理应用程序的内存使用情况。 每当我们创建类的实例时,ARC都会占用大量内存,以存储有关其类型,属性和值的信息。 当实例不再使用时,ARC释放内存,并允许将该内存用于其他目的。 被释放的所有实例将不再有权访问其属性或方法。 每次创建或引用实例时,ARC都会增加一。

在Swift中,默认情况下,所有实例均创建为strong引用,除非我们将其声明为weakunowned 。 通过将实例声明为weak实例或unowned实例实例,我们可以将其释放。 我们之所以能够取消分配实例的原因,是因为强大的引用周期可能导致内存泄漏。

 餐厅类{ 
var客户:客户?
}
 客户类别{ 
var餐厅:餐厅?
}

在这里,我们有一个Restaurant实例,它具有一个Customer实例作为其属性。 如果我们要创建任何一个类的实例,并想取消分配,则由于强大的引用周期,我们将无法这样做。 这两个实例相互之间具有很强的参照性,从而使ARC保持不变。

 餐厅类{ 
弱var客户:客户?
}
 客户类别{ 
var餐厅:餐厅?
}

强引用循环的一种解决方案是将属性声明为weak 。 通过使用weak引用,ARC在释放引用时会自动将其设置为nil。 以我们的餐厅和客户类别为例,这一次,我们将餐厅类别中的客户属性设置为弱变量。 如果我们要将客户属性设置为nil,它将成功取消分配并中断强引用周期。

拥有的

 餐厅类{ 
无主var成分:成分
var客户:客户?
  } 
 类成分{ 
var餐厅:餐厅?
}

owned参照与weak参照非常相似,但是owned参照必须具有值。 我们不能将自己的引用设置为nil。 提示是,如果知道您的价值在生命周期的某个时刻将为零,则使用weak引用;如果您确定存在价值,则使用owned 。 让我们看一下上面的例子。 在这里,我们有一个餐厅和食材类,餐厅类具有无主成分。 我们知道餐厅里一定有食材,但是我们可能有也可能没有顾客,因此在这种情况下我们必须使用unowned。